Нужно мне синхронизировать апликейшн с сервисом под 2000. Делаю примерно так:
//___ Service ___
PrEvent=CreateEvent(NULL,false,false,"Global\\PrEvent");
//_______ Application ______
PrEvent=OpenEvent(SYNCHRONIZE,TRUE,"Global\\PrEvent");
В итоге под админом програмуля работает, а под PowerUser апликейшн не может открыть эвент.
Люди, как правильно создать эвент в сервисе? Как ему нужный SECURITY_DESCRIPTOR прописать? Как вообще получить этот SECURITY_DESCRIPTOR?
И вообще где можно почитать (online) о таких вещах?
25.04.07 06:59: Перенесено модератором из 'MFC' — Odi$$ey
Здравствуйте ServerMouse, Вы писали:
SM>Нужно мне синхронизировать апликейшн с сервисом под 2000. Делаю примерно так:
SM>//___ Service ___
SM>PrEvent=CreateEvent(NULL,false,false,"Global\\PrEvent");
SM>//_______ Application ______
SM>PrEvent=OpenEvent(SYNCHRONIZE,TRUE,"Global\\PrEvent");
SM>В итоге под админом програмуля работает, а под PowerUser апликейшн не может открыть эвент.
SM>Люди, как правильно создать эвент в сервисе? Как ему нужный SECURITY_DESCRIPTOR прописать? Как вообще получить этот SECURITY_DESCRIPTOR?
Если хочешь, чтобы любой пользователь мог открыть это событие, надо при создании указать ему SECURITY_DESCRIPTOR with NULL DACL:
SECURITY_DESCRIPTOR SecDesc;
SECURITY_ATTRIBUTES sa;
InitializeSecurityDescriptor(&SecDesc, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SecDesc, TRUE, NULL, FALSE);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &SecDesc;
sa.bInheritHandle = FALSE;
PrEvent=CreateEvent(&sa,false,false,"Global\\PrEvent");
Если не хочешь открывать доступ всем к этому событию, то надо более тонко настраивать DACL.
SM>И вообще где можно почитать (online) о таких вещах?
http://msdn.microsoft.com/
>>И вообще где можно почитать (online) о таких вещах?
>http://msdn.microsoft.com/
Это конечно хорошо, но у меня и MSDN есть. Вот только написано там как-то мутно, непонятно, да ещё и по английски. Просто я впервые столкнулся с подобной проблемой и ничего об этом не знаю....