Не удалось получить путь к исполняемому файлу для идентификатора процесса 4 (ntoskrnl.exe)

Я пытался получить исполняемый путь путем перечисления всех процессов. Я использовал оба GetModuleFileNameExA а также QueryFullProcessImageNameA получить путь к исполняемым файлам.

Это работает практически для всего, кроме немногих, как ntoskrnl.exe (Система, Идентификатор процесса: 4). Когда я использую эти методы, СПРАВИТЬСЯ это получается НЕНУЛЕВОЙ но функции потерпеть поражение.

GetLastError оказывается 31

Есть ли какие-либо проблемы с кодом или какой-либо обходной путь должен быть сделан?
ПРИМЕЧАНИЕ. Мой EXE-файл — 32-разрядный, и у меня 64-разрядная ОС. Это как-то связано с этим?

INT32 GetFileNameAndPath(DWORD processId,string &filePath,string &fileName)
{
CHAR path[MAX_PATH];
DWORD size=MAX_PATH;
smatch match;

HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,FALSE,processId);

if(hProcess != NULL)
{
regex regx("[^\\\\]+$");

if(GetModuleFileNameExA(hProcess,NULL,path,size) != 0)
{
filePath = path;

if(regex_search(filePath,match,regx))
fileName = match.str();
}
else if(QueryFullProcessImageNameA(hProcess,0,path,&size) != 0)
{
filePath = path;

if(regex_search(filePath,match,regx))
fileName = match.str();
}
else
{
cout<<GetLastError();
}
}

CloseHandle(hProcess);

return SUCCESS;
}

-1

Решение

Да! Ответ в том, что вы не можете получить путь к ntoskrnl.exe. Мне было интересно, как менеджер задач это делает. Я нашел это после проверки в течение нескольких часов! : P (Не стоило так много).

Скриншот диспетчера задач

Если вы видите этот скриншот, вы можете увидеть, что процесс Путь к образу системы было C: \ WINDOWS тогда как для conhost.exe это был C: \ Windows.

Даже окна жестко закодированы для этого Exe. Они жестко закодировали это как % SystemRoot% \ system32 \ ntoskrnl.exe. Только когда вы расширяете Systemroot, вы получаете значение как C: \ WINDOWS. Когда вы делаете с API, таким как GetModuleFileNameEx, вы получаете путь как C: \ Windows. Так что технически нет выхода. И, по моему предположению, по соображениям безопасности они не позволили ни одному пользователю получить путь к Exe.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]