我问这个问题是因为事实证明,在 Delphi 中编写能够从登录屏幕运行的屏幕保护程序应用程序存在一些困难。
请参阅问题:Delphi 中的 Windows 7 登录屏幕保护程序
我已将问题(或至少一个问题)缩小到特定的 Win API 调用CreateEvent。
SyncEvent := CreateEvent(nil, True, False, '');
if SyncEvent = 0 then
RaiseLastOSError;
此代码仅在从登录屏幕调用时才会失败。GetLastError 返回访问被拒绝。很明显,登录屏幕上的安全限制阻止CreateEvent(nil, True, False, '');了根据需要创建事件。
(我真的不明白事件如何成为可利用的安全风险。)
所以,问题是:是否可以从登录屏幕创建事件?大概通过以下任一方式:
- 使用适当的
lpEventAttributes - 或者改为调用 CreatingEventEx。
虽然在 Delphi 中遇到过这个问题,但这更多的是关于 Win API。所以请随意用您选择的语言回答。