Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > C/C++: Системное программирование и WinAPI > Права доступа к ивенту |
Автор: Jin X 18.03.19, 10:01 |
Всем привет! Хочу создать event в сервисе (т.е. из-под пользователя SYSTEM) и открыть его для установки (SetEvent) в юзере/администраторе. Как это можно сделать? Разумеется, если создать event в сервисе обычным образом, то в юзере/админе его открыть не получится. |
Автор: Jin X 21.03.19, 18:31 |
Нашёл вот тут: CreateEvent и NtCreateEvent Чуть переоформил: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> var SA: TSecurityAttributes; SD: TSecurityDescriptor; H: THandle; begin // Создаем дескриптор безопасности if InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION) and // DACL не установлен, объект не защищён SetSecurityDescriptorDacl(@SD, True, nil, False) then begin // Настраиваем атрибуты безопасности, передавая указатель на дескриптор безопасности SA.nLength := SizeOf(SA); SA.lpSecurityDescriptor := @SD; SA.bInheritHandle := False; // Создаём событие H := CreateEvent(@SA, True, False, 'Global\MyTestEvent'); end; ... После создания такого объекта его можно спокойно открыть кем угодно хоть с EVENT_ALL_ACCESS |