Определение имени пользователя по идентификатору процесса - PullRequest
5 голосов
/ 03 июля 2010

Как я могу получить имя учетной записи пользователя, запустившего процесс с указанным идентификатором.Есть ли функция API для этого?

Я использую Windows, C ++.

1 Ответ

12 голосов
/ 03 июля 2010

Нет функции API, которая делает это напрямую, однако вы можете объединить несколько вызовов API для этого. Конечно, ваша программа должна удовлетворять любым ACL, которые применяются к процессу, который вы хотите исследовать.

Во-первых, учитывая идентификатор процесса, вам нужно открыть дескриптор процесса. Для этого вы можете использовать OpenProcess, запрашивая право доступа PROCESS_QUERY_INFORMATION.

Когда у вас есть этот дескриптор, вы можете позвонить OpenProcessToken, запросив права доступа TOKEN_QUERY.

Наконец, вы можете затем позвонить GetTokenInformation, запросив информационный класс TokenUser, который предоставит вам учетную запись пользователя для токена. Эта информация предоставляется вам в виде SID. Чтобы преобразовать SID в фактическое имя учетной записи, вы можете позвонить LookupAccountSid.

Не забудьте вызвать CloseHandle как для дескриптора процесса, так и для маркера токена, как только вы закончите с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...