我的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. ...