다음은 Windows에서 실행중인 프로세스의 기본 열거입니다 :
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define PSAPI_VERSION 1
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <sddl.h>
void ListProcesses()
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
::GlobalMemoryStatusEx(&statex);
::EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded);
cProcesses = cbNeeded/sizeof(DWORD);
for (size_t i = 0; i < cProcesses; ++i)
if(aProcesses[i] != 0)
std::cout << "PID: " << aProcesses[i] << ", Name: " << getProcessNameByID(aProcesses[i]) << std::endl;
}
당신은 결정을 내릴 getProcessNameByID
와 마지막 이름 룩업을 사용할 수 있습니다. 여기 getProcessPathNameByID
에 대한 코드는 다음과 같습니다
#include <tchar.h>
std::string getProcessNameByHandle(HANDLE hProcess)
{
if (NULL == hProcess)
return "<unknown>";
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HMODULE hMod;
DWORD cbNeeded;
if (::EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
::GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR));
return std::string(szProcessName);
}
std::string getProcessNameByID(DWORD processID)
{
HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
std::string result = getProcessNameByHandle(hProcess);
::CloseHandle(hProcess);
return result;
}
음 ... 나는 바이러스가 바이러스 백신이로드 될 때 감지하는 기억이 가장 일반적인 사용 사례 ... –