Возникла необходимость определять из драйвера принадлежность процесса к группе сервисов. То есть, по SID отделить те процессы, что стартовали как сервисы от тех, что стартовали как обычные процессы. Как получать SID я знаю, осталость только понять, как получить SID'ы тех "пользователей", под которыми стартуют сервисы (NT AUTHORITY\SYSTEM, NT AUTHORITY\LOCAL SERVICE и так далее).
Здравствуйте, Аноним, Вы писали:
А>Возникла необходимость определять из драйвера принадлежность процесса к группе сервисов. То есть, по SID отделить те процессы, что стартовали как сервисы от тех, что стартовали как обычные процессы. Как получать SID я знаю, осталость только понять, как получить SID'ы тех "пользователей", под которыми стартуют сервисы (NT AUTHORITY\SYSTEM, NT AUTHORITY\LOCAL SERVICE и так далее).
SeEnableAccessToExports(); // инициализация доступа к SeExportstypedef struct _SE_EXPORTS { ... } // сама структура, описана в IFS-Kit'е
// Собственно, указатель на SID SYSTEM'а. Там еще и другие есть, посмотрите.
SeExports->SeLocalSystemSid;
Но я бы не слишком доверял такой проверке на сервисность, т.к. сервис может стартовать и от имени другого пользователя.
(А пользователь вообще-то может работать под SYSTEM'ом).
Может есть смысл по parent process'у ?
Или у Service Manager'а выспросить ?
Здравствуйте, Alter_, Вы писали:
A_>Может есть смысл по parent process'у ?
Это не столь легко. К примеру: wmiprvse.exe под XP стартует через svchost.exe. Таким же образоом стартуют процессы, запущенные через COM.
A_>Или у Service Manager'а выспросить ?
Здравствуйте, Аноним, Вы писали:
A_>>Или у Service Manager'а выспросить ? А>С уровня драйвера? Как?
1) сделать user-mode helper
2) особо извратиться и через named pipes (встречал реализацию)
3) заглянуть в реестр и посмотреть, есть ли для такого процесса запись и соответствует ли SID процесса этой записи
Здравствуйте, Alter_, Вы писали:
A_>1) сделать user-mode helper
Ну, это неинтересно- потери по времени могут быть достаточно велики, а временные рамки в данном случае достаточно ограничены.
A_>2) особо извратиться и через named pipes (встречал реализацию)
Ух, как интересно, я бы хотел взглянуть на эту реализацию. По каким ключевикам можно было бы найти это в Инете?
A_>3) заглянуть в реестр и посмотреть, есть ли для такого процесса запись и соответствует ли SID процесса этой записи
Здравствуйте, Аноним, Вы писали:
A_>>2) особо извратиться и через named pipes (встречал реализацию) А>Ух, как интересно, я бы хотел взглянуть на эту реализацию. По каким ключевикам можно было бы найти это в Инете?
Это к сожелению было не в интернете. Внутреняя разработка. Но практически реализуемо.
И в этом деле скорее всего очень помогли исходники NT4 и 2000, которые в этом самом интернете примерно года 2 или 3 назад гуляли.
Про ReactOS не знаю.
A_>>3) заглянуть в реестр и посмотреть, есть ли для такого процесса запись и соответствует ли SID процесса этой записи А>Можно будет попробовать.
Кстати, при загрузке с Windows Live CD приложения запускаются как раз под SYSTEM'ом. Но я думаю для ваших задач это не принципиально.