Obtenir le descripteur de processus d’un processus par nom d’image

J’ai besoin de la manière la plus simple de C utilisant Win32 pour obtenir le descripteur de processus d’un autre processus par son nom de fichier exécutable.

Le processus que je recherche ne contient aucune classe de fenêtre enregistrée. Je sais aussi que s’il est en cours d’exécution, il ne fonctionnera qu’une seule fois.

Utilisez CreateToolhelp32Snapshot , Process32First et Process32Next pour énumérer tous les processus.

Dans PROCESSENTRY32, vous pouvez trouver un membre szExeFile . Vous pouvez obtenir le descripteur de processus en appelant OpenProcess avec l’ID de processus th32ProcessID dans la même structure.

Une fois que vous avez trouvé un processus correspondant à votre nom exe, vous pouvez sortir de votre boucle et obtenir le descripteur.

Remarque: Si vous devez énumérer CHAQUE processus, quelle que soit la session, vous devez acquérir le privilège SE_DEBUG.

Au sumt de votre appel principal ceci:

 acquirePrivilegeByName(SE_DEBUG_NAME);// SeDebugPrivilege 

Et voici la définition de acquirePrivilegeByName :

 BOOL acquirePrivilegeByName( const TCHAR *szPrivilegeName) { HANDLE htoken; TOKEN_PRIVILEGES tkp; DWORD dwerr; if (szPrivilegeName == NULL) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } if (!LookupPrivilegeValue(NULL, szPrivilegeName, &(tkp.Privileges[0].Luid))) return FALSE; tkp.PrivilegeCount = 1; tkp.Privileges[0].Atsortingbutes = SE_PRIVILEGE_ENABLED; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken)) return FALSE; if (!AdjustTokenPrivileges(htoken, FALSE, &tkp, 0, NULL, NULL) || GetLastError() != ERROR_SUCCESS) // may equal ERROR_NOT_ALL_ASSIGNED { dwerr = GetLastError(); CloseHandle(htoken); SetLastError(dwerr); return FALSE; } CloseHandle(htoken); SetLastError(ERROR_SUCCESS); return TRUE; } //acquirePrivilegeByName() 

En plus de ce que j’ai dit ci-dessus, il existe un exemple d’utilisation de l’API Win32 ci-dessus.