파괴적인 프로그램을 작성할 때는 프로세스를 순회하여 ID를 추출해야 합니다
위 기능의 경우 먼저 여러 API를 소개합니다
1.CreateToolhelp32Snapshout 함수
프로세스, 모듈 또는 스레드의 스냅샷 가져오기
구문은 다음과 같습니다.
HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );
첫 번째 매개변수: 스냅샷에는 system , 매개변수는 다음과 같습니다:
TH32CS_SNAPPROCESS
를 사용합니다. 여기에 스냅샷이 포함됩니다. 시스템의 모든 프로세스입니다.
두 번째는 PROCESSENTRY32 구조에 관한 것입니다.
구문은 다음과 같습니다.
typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32, *PPROCESSENTRY32;
다음은 항목을 설명하는 항목입니다. 스냅샷이 호출되면 시스템 주소 공간의 프로세스를 읽습니다.
여기에서는 szExeFile[MAX_PATH] 및
th32ParentProcessID만 소개합니다. 이는 프로세스가 생성된 후 프로세스(상위 프로세스)의 ID입니다.
szExeFile : 프로세스 내 실행 파일명
다음은 소스코드입니다! 일부 기능은 설명되어 있지 않으나 주석이나 문자 그대로의 의미를 통해 이해할 수 있습니다
#include <Windows.h> #include <stdio.h> #include <TlHelp32.h> int main() { HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProceessnap == INVALID_HANDLE_VALUE) { printf_s("创建进行快照失败\n"); return -1; } else { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); BOOL hProcess = Process32First(hProceessnap, &pe32); char buff[1024]; while (hProcess) { wsprintf(buff, "进程名:%s--------------------进程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID); printf_s("%s\n", buff); memset(buff, 0x00, 1024); hProcess = Process32Next(hProceessnap, &pe32); } } CloseHandle(hProceessnap); return 0; }
실행 결과는 다음과 같습니다
위는 프로세스 및 프로세스 ID 탐색을 위한 C/C++ 가젯의 내용입니다. 더 많은 관련 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. !