2

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

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

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

我还尝试将清单中的 UIaccess 设置为 TRUE 并对程序进行数字签名,但没有运气。

关于如何解决这个问题的任何想法?谢谢。

4

1 回答 1

3

只是想我会为那些也在挣扎的人跟进这个,因为我终于找到了一种方法来做到这一点。

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 函数的工作示例

于 2009-10-14T07:47:54.093 回答