CreateToolhelp32Snapshot
CreateToolhelp32Snapshot은 시스템의 프로세스, 스레드, 모듈 등의 스냅샷을 생성하여 프로세스 열거에 필수적으로 사용됩니다.
굳이 스냅샷을 생성하여 프로세스를 가져오는 이유로는, 실시간으로 프로세스를 열거하다가 해당 프로세스가 종료하게 된다면 예외 상황이 발생할 수 있기 때문입니다.
HANDLE CreateToolhelp32Snapshot(
[in] DWORD dwFlags,
[in] DWORD th32ProcessID
);인자
설명
보편적인 값
dwFlags
스냅샷 플래그
TH32CS_SNAPPROCESS
th32ProcessID
프로세스 ID
0(모든 프로세스)
Example
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;
DWORD getProcId(const wchar_t* processName) {
// 메모리에 로드된 프로세스 스냅샷 생성
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
wcout << L"Failed to take a snapshot" << endl;
return 0;
}
// 스냅샷을 순회하며 저장할 프로세스 변수 생성
PROCESSENTRY32W pe;
pe.dwSize = sizeof(PROCESSENTRY32W);
if (Process32FirstW(hSnapshot, &pe)) {
do {
// 대소문자 구분 없이 비교하여 일치할 경우 조건분기
if (_wcsicmp(pe.szExeFile, processName) == 0) {
wcout << L"Succeed to find a process : " << pe.szExeFile << endl;
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
} while (Process32NextW(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
wcout << L"Failed to find a process in memory" << endl;
return 0;
}
int main() {
DWORD pid = getProcId(L"notepad.exe");
return 0;
}References
Last updated