【发布时间】:2012-08-06 18:02:08
【问题描述】:
假设我有一个带有按钮的 Windows GUI 应用程序。我可以通过使用带有BM_CLICK 作为调用参数的sendMessage winapi 调用来模拟对该按钮的单击。
现在,从安全角度来看,我不希望这种情况发生。即我的目标进程应该忽略来自另一个进程的 sendMessage 调用。有没有规定可以做到这一点?一种验证 sendMessage 调用的方法?
编辑:换句话说,我怎样才能防止启动器、TurnitOn http://www.raymond.cc/blog/how-to-enable-and-access-disabled-grayed-out-buttons-windows-and-checkboxes/ 等应用程序访问不应该由用户访问的功能?
【问题讨论】:
-
这就是为什么有 UIPI 来阻止低权限应用程序向高权限应用程序发送消息的原因。 (msdn.microsoft.com/en-us/library/bb625963.aspx) 但是不,您通常无法分辨消息来自何处。毕竟,有些消息来自系统。
-
谢谢! UIPI 是我不熟悉的东西。但根据该文件,UIPI 不会对处于同一特权级别的应用程序起作用。这不会减少 UIPI 的使用吗?
-
作为系统管理员,您不应该这样做。如果我向您的应用程序发送窗口消息,我希望它能够正确处理它们,而不是决定我没有“经过身份验证”。 Windows 安全性是基于用户的,而不是基于应用程序的,因此即使尝试这样做也没有任何意义;毕竟,用户可以修改您流程中的代码,因此根据定义,他们可以绕过您可能采取的任何措施。
-
@asudhak 在这种情况下,请在处理事件时检查它是否仍然适用(或启用)。
-
按钮最初是如何被禁用的?大概你有一个函数或一些内部状态来回答“应该立即启用按钮吗?”这个问题。在处理 BM_CLICK 时调用相同的函数等,如果当时不应该启用按钮,则忽略该消息。
标签: windows winapi sendmessage