Получить имя исполняемого файла процесса из идентификатора процесса - PullRequest
3 голосов
/ 12 декабря 2011

В настоящее время я пытаюсь получить имена списка программ, чей pid у меня есть.

Программа запускается от имени администратора, но GetModuleFileNameEx завершается ошибкой с кодом ошибки 5.

Я открываю программу с OpenProcess(PROCESS_TERMINATE,PROCESS_QUERY_INFORMATION), и у меня включена SE_DEBUG_PRIVILEGE.

Ответы [ 2 ]

10 голосов
/ 12 декабря 2011

Дескриптор процесса, переданный GetModuleFileNameEx () требует PROCESS_QUERY_INFORMATION и PROCESS_VM_READ прав доступа.

Это сработало для меня:

HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                       FALSE,
                       6088);
if (0 == h)
{
    std::cerr << "OpenProcess() failed: " << GetLastError() << "\n";
}
else
{
    char exe_path[2048] = {};

    if (GetModuleFileNameEx(h, 0, exe_path, sizeof(exe_path) - 1))
    {
        std::cout << exe_path << "\n";
    }
    else
    {
        std::cerr << "GetModuleFileNameEx() failed: " <<
            GetLastError() << "\n";
    }
    CloseHandle(h);
}

Однако,как указывали другие (и также указано в документации для GetModuleFileNameEx ()), есть более безопасные способы получения этой информации:

0 голосов
/ 12 декабря 2011

Согласно этой теме эта ошибка возвращается, когда недостаточно информации для возврата имени файла.

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