【问题标题】:Access to external window handles访问外部窗口句柄
【发布时间】:2010-12-05 06:54:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    只是想我会为那些也遇到困难的人跟进这件事,因为我终于找到了一种方法。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多