Windows-7登录屏幕中的CreateEvent

Dis*_*ned 4 delphi security winapi winlogon windows-7

我问这个问题,因为事实证明在Delphi中编写一个能够从Logon屏幕运行的屏幕保护程序应用程序有一些困难.

请参阅问题:Delphi中的Windows 7登录屏幕保护程序

我已经将问题(或至少一个问题)缩小到特定的Win API调用CreateEvent.

SyncEvent := CreateEvent(nil, True, False, '');
if SyncEvent = 0 then
  RaiseLastOSError;
Run Code Online (Sandbox Code Playgroud)

此代码仅在从登录屏幕调用时失败.并且GetLastError返回拒绝访问.很明显,登录屏幕上的安全限制阻止CreateEvent(nil, True, False, '');了根据需要创建事件.

(我真的不知道一个事件如何成为可利用的安全风险.)

所以,问题是:是否可以从登录屏幕创建一个事件?大概通过以下任一方式:

  • 使用合适的 lpEventAttributes
  • 或者调用CreatingEventEx.

尽管在Delphi中遇到了这个问题,但这更多是关于Win API.所以请用您选择的语言自由回答.

Rem*_*eau 7

尝试将最后一个参数设置CreateEvent()nil而不是''.nil指针和指向零长度字符串的指针之间存在差异.该 文档没有说明任何关于被处理的零长度字符串与任何其他命名字符串的区别.因此,可能存在另一个零长度命名事件,该事件存在于您的应用程序无法访问的计算机上的其他位置,因此在CreateEvent()尝试访问现有事件时失败时出现"拒绝访问"错误.如果要创建未命名的事件,请nil改用.