Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 :)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)