Подтвердить что ты не робот

Как получить имя файла процесса из pid, если OpenProcess() не работает с ACCESS_DENIED?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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