Доступ запрещен при перечислении через модули процессов C++

Я пытаюсь перечислить через модули процесса, чтобы получить диапазон адресов памяти, в котором он работает. Эта функция прекрасно работает с другими процессами. Однако в конкретном процессе, который я намеревался проанализировать, я получаю код ошибки 5, ERROR_ACCESS_DENIED. Обратите внимание, что в позиции 1 я получаю код ошибки 0, а в позиции 2 - код ошибки 5. Я понимаю, что некоторые объекты ядра могут быть защищены, что может объяснить этот код ошибки. Это причина? Если так, возможно ли обойти это?

int PrintModules(DWORD processID)
{

HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;

// Print the process identifier.

printf("\nProcess ID: %u\n", processID);

// Get a handle to the process.

hProcess = OpenProcess(PROCESS_ALL_ACCESS,
    FALSE, processID);
std::cout << "POSITION 1 : " << GetLastError() << std::endl;
if (NULL == hProcess)
{
    return 1;
}
// Get a list of all the modules in this process.

if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
    for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
    {
        TCHAR szModName[MAX_PATH];

        // Get the full path to the module's file.

        if (GetModuleFileNameEx(hProcess, hMods[i], szModName,
            sizeof(szModName) / sizeof(TCHAR)))
        {
            // Print the module name and handle value.

            _tprintf(TEXT("\t%s (0x%08X)\n"), szModName, hMods[i]);
        }
    }
}
else {
    std::cout << "POSITION 2 : " <<GetLastError() << std::endl;
}

// Release the handle to the process.

CloseHandle(hProcess);

return 0;
}

0 ответов

ERROR_ACCESS_DENIED означает, что ваш дескриптор недействителен. Вы получаете недопустимый дескриптор при вызове OpenProcess по одной из двух причин.

Либо ваш идентификатор процесса неверен, либо вы не работаете как администратор. Для получения разрешений PROCESS_ALL_ACCESS вам необходимо запустить от имени администратора.

Другие вопросы по тегам