Maison  >  Article  >  développement back-end  >  Gadget C/C pour parcourir les processus et les ID de processus

Gadget C/C pour parcourir les processus et les ID de processus

黄舟
黄舟original
2017-01-22 14:06:072005parcourir

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 :

Gadget C/C pour parcourir les processus et les ID de processus


Gadget C/C pour parcourir les processus et les ID de processus

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


Gadget C/C pour parcourir les processus et les ID de processus

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) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn