Как указано в документации , OpenProcess
завершается ошибкой для процессов в режиме ожидания и CSRSS.
Если указанный процесс является процессом Idle или одним из процессов CSRSS, эта функция завершается ошибкой, а последний код ошибки равен ERROR_ACCESS_DENIED
, поскольку их ограничения доступа не позволяют открывать код уровня пользователя.
Вы должны включить SeDebugPrivilege
(а также запустить приложение с правами администратора).Более того, если ваше приложение скомпилировано как 32-битное, оно не может получить доступ к 64-битным процессам с помощью OpenProcess
Если вы просто хотите получить список запущенных процессов, используйте CreateToolhelp32Snapshot
для просмотра списка запущенных процессов.
#define UNICODE
#include <Windows.h>
#include <stdio.h>
#include <psapi.h>
#include <tlhelp32.h>
int main()
{
wprintf(L"Start:\n");
HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPMODULE, 0);
if(hndl)
{
PROCESSENTRY32 process = { sizeof(PROCESSENTRY32) };
Process32First(hndl, &process);
do
{
wprintf(L"%8u, %s\n", process.th32ProcessID, process.szExeFile);
} while(Process32Next(hndl, &process));
CloseHandle(hndl);
}
}
Примечание: рекомендуется компилировать программу в формате Unicode.Избегайте _txxx
макросов, таких как _tprintf
и т. Д.