Как получить имя файла процесса из pid, если OpenProcess () завершается неудачно с ACCESS_DENIED? - PullRequest
13 голосов
/ 05 февраля 2012

Я пытаюсь получить имя процесса из его pid.Пользователь работает как администратор, UAC включен, не повышен.

В некоторых системных процессах, таких как services.exe, безопасность настроена таким образом, что OpenProcess(PROCESS_QUERY_INFORMATION ... завершается неудачно с ERROR_ACCESS_DENIED.Тот же результат с PROCESS_QUERY_LIMITED_INFORMATION правом доступа.Тем не менее, я вижу, что Process Explorer может хотя бы перечислить все эти процессы вместе с их pid и именем файла (при работе от имени администратора без прав).

Мой вопрос: как я могу сделать то же самое (получить имя файла из pid), если администратор без повышенных прав не может следовать обычному маршруту OpenProcess () + GetProcessImageFileName ()?

Ответы [ 3 ]

11 голосов
/ 05 февраля 2012

Вы пробовали Process32First () и Process32Next () с дескриптором, полученным с помощью CreateToolhelp32Snapshot ()? Он не дает вам полного пути, но должен хотя бы позволить вам получить имя файла.

5 голосов
/ 05 февраля 2012

Вы не можете открыть системные процессы (точнее, процессы, выполняющиеся под другой учетной записью - в данном случае пользователь SYSTEM) без включенной привилегии SE_DEBUG для вашего процесса. Если вы работаете от имени администратора, вы можете легко установить привилегию: http://support.microsoft.com/kb/131065/en-us

4 голосов
/ 05 февраля 2012

Вы пробовали PROCESS_QUERY_LIMITED_INFORMATION вместо этого?Он запрашивает более низкий уровень доступа, который может предоставить как минимум имя исполняемого файла.Позволяет вам позвонить QueryFullProcessImageName, который предоставляет информацию, которую вы ищете

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