我们运行两个应用程序,每个应用程序都使用RegisterWindowMessage()注册相同的消息:应用程序A作为普通用户,应用程序B作为管理员,在机器上的同一用户会话中,这些应用程序将相互发送此消息。当A和B作为同一个用户运行时,一切正常,我们能够使用PostMessage()消息传递进行通信。现在,当应用程序B以管理员身份运行时,消息不再通过。我们能做些什么呢?
这种情况是否要求我们使用其他机制(除了消息)?
在Windows Vista及更高版本中,用户界面特权隔离(UIPI)防止较低完整性进程向较高完整性进程发送窗口消息。在早期的Windows版本中,恶意代码可以通过滥用窗口消息来攻击管理进程。默认情况下,ui会阻止所有值高于WM_USER
的消息,包括通过RegisterWindowMessage()
注册的消息。因此,为了允许A向B发送这样的消息,B必须首先调用ChangeWindowMessageFilter()
或ChangeWindowMessageFilterEx()
来接收它希望从较低完整性进程接收的每个阻塞消息。