Maison >développement back-end >Tutoriel C#.Net >Gadget C/C pour parcourir les processus et les ID de processus
Lorsque nous écrivons des programmes destructeurs, nous devons parcourir le processus et extraire l'ID
Pour les fonctions ci-dessus, nous introduisons d'abord plusieurs API
1.CreateToolhelp32Fonction Snapshout
Obtenir un instantané d'un processus, d'un module ou d'un thread
La syntaxe est la suivante :
HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );
Le premier paramètre : l'instantané contient le partie système, les paramètres sont les suivants :
Nous utilisons TH32CS_SNAPPROCESS
instantané ici Contient tous les processus du système.
La seconde concerne la structure PROCESSENTRY32
La syntaxe est la suivante :
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;
Ceci décrit une entrée, qui est Lorsque l'instantané est appelé, le processus dans l'espace d'adressage du système est lu.
Ici, nous introduisons uniquement szExeFile[MAX_PATH] et
th32ParentProcessID : il s'agit de l'identité du processus (processus parent) après la création du processus
szExeFile : Le nom du fichier exécutable dans le processus
Ce qui suit est le code source ! Certaines fonctions ne sont pas expliquées, mais vous pouvez les comprendre à travers des commentaires ou des significations littérales
#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; }
Les résultats d'exécution sont les suivants
Ce qui précède est le contenu du gadget C/C qui traverse les processus et les ID de processus. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php. cn) !