1

我们运行两个应用程序,每个应用程序都使用 RegisterWindowMessage() 注册相同的消息:应用程序 A 作为普通用户,应用程序 B 作为管理员在机器上的同一用户会话中,并且这些应用程序将这个消息发送给另一个。当 A 和 B 作为同一个用户运行时,一切都很好,我们能够使用 PostMessage() 消息进行通信。现在,由于应用程序 B 以管理员身份运行,消息不再通过。我们对于它可以做些什么呢?

这种情况是否要求我们使用其他机制(消息除外)?

4

1 回答 1

11

在 Windows Vista 及更高版本中,用户界面特权隔离 (UIPI)可防止较低完整性进程将窗口消息发送到较高完整性进程。在早期的 Windows 版本中,恶意代码可以通过滥用窗口消息来攻击管理进程。默认情况下,UIPI 会阻止所有值高于 的WM_USER消息,其中包括通过 注册的消息RegisterWindowMessage()。因此,为了允许 A 向 B 发送此类消息,B 必须首先调用它想要从较低完整性进程接收的每个阻塞消息ChangeWindowMessageFilter()ChangeWindowMessageFilterEx()

于 2013-03-16T04:20:18.023 回答