Получение информации о каждом процессе - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать программу, которую любой обычный пользователь может запустить в Windows, и сгенерировать список процессов всех процессов, включая расположение исполняемых файлов.Я использовал CreateToolhelp32Snapshot (), чтобы получить все имена процессов, pid, ppid.Но возникают проблемы с получением пути к изображению.Все, что я делаю, приводит к отказу в доступе.

Я пробовал ZwQueryInformationProcess, GetProcessImageFileName и т. Д., А также использовал OpenProcess, чтобы получить дескриптор для каждого процесса.Я могу получить ручку, используя PROCESS_QUERY_LIMITED_INFORMATION, но любой другой вариант не работает.Я потерян и был в этом в течение нескольких дней.Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 17 мая 2018

Это код, который работает для пользователей без прав администратора в Windows. Используйте szExeFile член PROCESSENTRY32, чтобы получить путь:

HANDLE hProcessSnap = NULL;
HANDLE hProcess = NULL;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass = 0;

// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
    return;
}

// Set the size of the structure before using it.
pe32.dwSize = sizeof(PROCESSENTRY32);

// Retrieve information about the first process,
// and exit if unsuccessful
if (!Process32First(hProcessSnap, &pe32))
{
    CloseHandle(hProcessSnap);          // clean the snapshot object
    return;
}

// Now walk the snapshot of processes, and
// display information about each process in turn
do
{
    // do something with the pe32 struct.
    // pe32.szExeFile -> path of the file

} while (Process32Next(hProcessSnap, &pe32));

CloseHandle(hProcessSnap);
...