Um das Handle eines Prozesses anhand seines Namens abzurufen, können wir die Funktion CreateToolhelp32Snapshot nutzen um eine Momentaufnahme der Systemprozesse zu erhalten. Diese Funktion bietet Zugriff auf Informationen zu laufenden Prozessen, einschließlich ihrer Prozessnamen.
Der folgende Codeausschnitt zeigt, wie Sie mit CreateToolhelp32Snapshot und Process32Next nach einem Prozess suchen Benennen Sie das Handle und rufen Sie es ab:
#include <cstdio> #include <windows.h> #include <tlhelp32.h> int main(int, char *[]) { PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (Process32First(snapshot, &entry) == TRUE) { while (Process32Next(snapshot, &entry) == TRUE) { if (stricmp(entry.szExeFile, "target.exe") == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); // Do stuff with the process... CloseHandle(hProcess); } } } CloseHandle(snapshot); return 0; }
Wenn Sie es benötigen Wenn Sie auf den PROCESS_ALL_ACCESS-Zugriff zugreifen möchten, müssen Sie möglicherweise vorübergehend die Berechtigung SE_DEBUG_NAME aktivieren. So können Sie das tun:
#include <cstdio> #include <windows.h> #include <tlhelp32.h> void EnableDebugPriv() { HANDLE hToken; LUID luid; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = luid; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL); CloseHandle(hToken); } int main(int, char *[]) { EnableDebugPriv(); // ... (Code from previous example)... return 0; }
Das obige ist der detaillierte Inhalt vonWie rufe ich ein Prozesshandle anhand seines Namens in C ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!