题
我有我目前工作的程序的问题。它是由增加的安全性在Vista /视窗7引起的,特别是其防止窗口具有较低完整性级别“谈话”到较高的UIPI之一。
在我的情况,我想告诉高完整性级别的窗口移动到我们的应用程序,它完美的作品在XP或Windows 7的安全性了。
我曾尝试直接设置更高IL窗口的HWND,而不是使用FindWindow函数()函数,此工作正常,但试图移动,或通常与它进行交互时该程序然后将失败。由应用程序保存在windowhandle到通过在较低的IL运行该应用是嵌入式的和读出。
我还试图在清单中设定UIaccess为TRUE和数字签名的程序,但没有运气。
这是如何解决这个问题的任何想法? 感谢。
解决方案
只是想我会跟进这件事的人谁也挣扎,我终于找到了一个办法做到这一点。
IL =完整性级别。
我有2个应用程序,highIL.exe和lowIL.exe的highIL想找到lowIL.exe窗口,将其设置为一个子窗口,并将其移动到为它创建于highIL.exe的区域。这被阻UIPI在Vista +。
在结束我使用在Vista中ChangeWindowMessageFilter方法和ChangeWindowMessageFilterEx在Windows7,无论在USER32.DLL找到。这些功能让你捅在UIPI一个洞,让你想通过邮件。
我使用RegisterWindowMessage函数创建了一些自定义消息,我使用该功能来注册在两个highIL和lowIL应用的方法,所述线看起来有点像这样:
const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));
在lowIL.exe然后能够将这些消息发送到highIL.exe窗口没有他们被阻挡。然后,它是仅简单地添加和写入消息处理程序的情况。
如果你有机会获得这两种高和低IL此方法才有效。 在MSDN也对ChangeWindowMessageFilterEx功能的工作示例有网站