c++ - 访问外部窗口句柄

标签 c++ windows-7 windows-vista uipi

我当前正在处理的程序有问题。这是由于 vista/Windows 7 中增强的安全性引起的,特别是 UIPI,它阻止完整性级别较低的窗口与较高完整性级别的窗口“对话”。

就我而言,我想告诉具有高完整性级别的窗口进入我们的应用程序,它可以在 XP 或 Windows 7 上完美运行,并且安全性关闭。

我尝试直接设置较高 IL 窗口的 HWND,而不是使用 findwindow() 函数,这工作正常,但在尝试移动它或通常与其交互时程序会失败。窗口句柄由应用程序保存,以供运行在较低 IL 的应用程序嵌入和读取。

我还尝试将 list 中的 UIaccess 设置为 TRUE 并对程序进行数字签名,但没有成功。

关于如何解决这个问题有什么想法吗? 谢谢。

最佳答案

只是想我会为那些也遇到困难的人跟进这个问题,因为我终于找到了一种方法来做到这一点。

IL = 完整性级别。

我有 2 个应用程序,highIL.exe 和 lowIL.exe,highIL 想要找到 lowIL.exe 窗口,将其设置为子窗口,并将其移动到 highIL.exe 上为其创建的区域中。这在 vista+ 中被 UIPI 阻止。

最后我在vista中使用了ChangeWindowMessageFilter方法,在Windows7中使用了ChangeWindowMessageFilterEx,两者都在user32.dll中找到。这些函数允许您在 UIPI 中挖一个洞,以允许您想要的消息通过。

我使用 RegisterWindowMessage 函数创建了一些自定义消息,我使用此函数在 highIL 和 lowIL 应用程序中注册该方法,该行看起来有点像这样:

const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));

lowIL.exe 然后能够将这些消息发送到 highIL.exe 窗口,而不会被阻止。然后就是简单地添加和编写消息处理程序的情况。

仅当您可以访问高 IL 和低 IL 时,此方法才有效。 MSDN 上还有 ChangeWindowMessageFilterEx 函数的工作示例 Website

关于c++ - 访问外部窗口句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542675/

相关文章:

c# - 对 Windows 如何获取音频线路名称感到困惑

C++ std::queue pop() 和析构函数

c++ - C++20 可变参数函数中的多个概念约束参数包不接受第一个参数包中的参数

c++ - 在 Visual Studio 中调试时,我可以将一些 C/C++ 结构内容保存到磁盘吗?

c++ - 高效编辑图像中的像素

windows - 如何在 Windows 中更改 Maven 存储库文件夹?

windows-7 - Windows 7 上的 Hadoop 单节点安装

c# - ClickOnce 无法在 Windows Vista SP2 上安装 LocalDB 2012

iis - Windows 7 inetpub wwwroot 只读

macos - 如何配置 Vista Ultimate(64 位)帐户,以便它可以访问 OSX 上的 SMB 共享?