Как добавить синхронизацию прямо в строку SDDL для CreateEvent
Моя служба Windows создает 2 события с CreateEvent для связи с пользовательским приложением. Служба и приложение пользователя не работают под одной учетной записью. Пользовательское приложение открывает событие и устанавливает для него сигнал без ошибок. Но событие никогда не принимается службой. Другое событие работает в обратном направлении. Так что я думаю, что события упускают право на синхронизацию.
Обслуживание:
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
;
Спасибо за вашу помощь,
Оливье
1 ответ
Вместо использования "строковых прав 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.
...