Ответ 1
Вы пробовали Process32First() и Process32Next() с дескриптором, полученным CreateToolhelp32Snapshot()? Это не дает вам полный путь, но, по крайней мере, позволит вам получить имя файла.
Я пытаюсь получить имя процесса из своего pid. Пользователь работает как Администратор, UAC включен, а не повышен.
Некоторые системные процессы, такие как services.exe
, имеют свою безопасность, настроенную таким образом, что OpenProcess(PROCESS_QUERY_INFORMATION ...
терпит неудачу с ERROR_ACCESS_DENIED
. Тот же результат с правом доступа PROCESS_QUERY_LIMITED_INFORMATION
. Тем не менее, я вижу, что Process Explorer может по крайней мере перечислить все эти процессы вместе с их pid и именем файла ( при запуске как незанятый Администратор).
Мой вопрос в том, как я могу сделать то же самое (получить имя файла из pid), учитывая, что администратор с невыполнением не может следовать обычным маршрутом OpenProcess() + GetProcessImageFileName()?
Вы пробовали Process32First() и Process32Next() с дескриптором, полученным CreateToolhelp32Snapshot()? Это не дает вам полный путь, но, по крайней мере, позволит вам получить имя файла.
Вы не можете открывать системные процессы (точнее, процессы, запущенные под другой учетной записью - в этом случае - пользовательская система) без разрешения SE_DEBUG
для вашего процесса.
Если вы используете admin, вы можете легко установить привилегию:
http://support.microsoft.com/kb/131065/en-us
Попробовали ли вы PROCESS_QUERY_LIMITED_INFORMATION
? Он запрашивает более низкий уровень доступа, который может предоставить как минимум имя исполняемого файла. Он позволяет вам вызвать QueryFullProcessImageName
, который предоставляет информацию, которую вы ищете