#include <windows.h>#include <iostream>#include <tlhelp32.h>#include <Psapi.h>using namespace std;class trouve_process{ public: // on mets les var en public pour que ca fasse beau avec la POO PROCESSENTRY32 liste ; HANDLE photo ; HANDLE hproc ; TCHAR szName[MAX_PATH];/*typedef struct tagPROCESSENTRY32 { plus de détails : http://msdn.microsoft.com/en-us/library/ms684839(VS.85).aspx 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;*/ double chercher (char name[]) //méthode chercher : arguments nom du process à trouver { int trouve = 0 ; int resultat ; /* Le principe ici est de prendre une "photo" des process avec CreateToolhelp32Snapshot, le tout enregistré dans des structures (cf plus haut). une fois la "photo" prise, on fait défiler les process un par un avec Process32First et Process32Next, et on vérifie le nom du process cible par rapport au nom donné en argument. */ photo = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) ; resultat = Process32First (photo, &liste) ; while (resultat) { // Si on a trouvé le process if (strstr (liste.szExeFile, name)) { trouve = 1 ; cout << liste.dwSize ; cout << liste.cntUsage; cout << endl; cout << liste.th32ProcessID; cout << endl; cout << liste.th32DefaultHeapID; cout << endl; cout << liste.th32ModuleID; cout << endl; cout << liste.cntThreads; cout << endl; cout << liste.th32ParentProcessID; cout << endl; cout << liste.pcPriClassBase; cout << endl; cout << liste.dwFlags; cout << endl; cout << liste.szExeFile; cout << endl; cout << endl; // On ouvre le process père pour récupere son nom avec GetModuleBaseName hproc = OpenProcess(PROCESS_ALL_ACCESS , FALSE , liste.th32ParentProcessID); cout << "processus pere : " ; GetModuleBaseName(hproc, NULL, szName, MAX_PATH) ; cout << szName ; cout << endl; CloseHandle (hproc) ; // fermuture du handle donc du process (ben ui on fait ca propre hein !) break; } resultat = Process32Next (photo, &liste) ; // on passe au process suivant si on a rien trouvé } if (trouve != 1) { cout << "pas trouve" ; } CloseHandle (photo) ; return liste.th32ParentProcessID ; }};int main(){ /* ouvrir la liste des process avec un CreateToolhelp32Snapshot vérifier le process par rapport au nom obtenir son pere dans l'arborescence affichage */int parent ;trouve_process test ; // on crée l'instance de l'objetparent = test.chercher("cmd.exe") ; // et on fait une recherche sur cmd.exereturn 0;}