Здравствуйте 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/
Автор: Alex Fedotov    Оценить