如何在CreateEvent的SDDLstring中添加同步权限

我的Windows服务使用CreateEvent创build2个事件来与用户应用程序进行通信。 该服务和用户应用程序不在同一个用户帐户下运行。 用户应用程序打开该事件,并将其设置为无错信号。 但是这个事件从来没有被服务接收到。 另一个事件的方向相反。 所以我认为这些事件错​​过了同步化的权利。

服务:

SECURITY_ATTRIBUTES security; ZeroMemory(&security, sizeof(security)); security.nLength = sizeof(security); ConvertStringSecurityDescriptorToSecurityDescriptor(L"D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GWGR;;;IU)", SDDL_REVISION_1, &security.lpSecurityDescriptor, NULL); EvtCreateNewUserSession = CreateEventW( &security, // security attributes TRUE, // manual-reset event FALSE, // initial state is not signaled L"Global\\MyEvent" // object name ); 

互动应用程式

 HANDLE EvtCreateNewUserSession = OpenEventW( EVENT_MODIFY_STATE | SYNCHRONIZE, // default security attributes FALSE, // initial state is not signaled L"Global\\MyEvent" // object name ; 

谢谢你的帮助,

奥利维尔

而不是使用“字符串SDDL权限”(如GA)使用0xXXXXXXXX格式(您可以组合标志,然后将它们转换为十六进制字符串)。

例如,这个SDDL: D:(A;;0x001F0003;;;BA)(A;;0x00100002;;;AU)创建DACL为:

 - BA=Administrators, 0x001F0003=EVENT_ALL_ACCESS (LocalSystem and LocalService are in Administrators group, but NetworkService is not) - AU=Authenticated Users, 0x00100002=SYNCHRONIZE | EVENT_MODIFY_STATE 

http://msdn.microsoft.com/en-us/library/windows/desktop/aa374928(v=vs.85).aspx – 字段rights

 A string that indicates the access rights controlled by the ACE. This string can be a hexadecimal string representation of the access rights, such as "0x7800003F", or it can be a concatenation of the following strings. ...