可以对 Windows XP 中的所有键盘/鼠标事件设置挂钩:
SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)JournalLogProc, GetModuleHandle(NULL), 0);
...但在 Windows 7 中,SetWindowsHookEx 返回 5(拒绝访问)。
如何设置功能需要的权限/ACL?即使我以“管理员身份”运行程序,我也会遇到相同的“拒绝访问”错误。
可以对 Windows XP 中的所有键盘/鼠标事件设置挂钩:
SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)JournalLogProc, GetModuleHandle(NULL), 0);
...但在 Windows 7 中,SetWindowsHookEx 返回 5(拒绝访问)。
如何设置功能需要的权限/ACL?即使我以“管理员身份”运行程序,我也会遇到相同的“拒绝访问”错误。
挂钩不是安全对象,因此您不能为它们设置 ACL。您在 Win7 中收到错误的原因是因为在 Vista 中引入的 UAC 改变了一般如何使用日志挂钩的规则。
日志挂钩只能由提升的进程设置,并且该进程必须通过使用设置的 UAC 清单绕过用户界面特权隔离 (UIPI)uiAccess=True
。请注意,设置uiAccess=True
还有其他影响,因此请确保您了解它的实际作用(有关详细信息,请参阅Windows 完整性机制设计)。仅仅以管理员身份运行应用程序是不够的。
唯一的其他解决方法是手动更改计算机的安全策略以完全禁用 UAC,或减少 UAC 设置中的某些安全限制。