Heim > Backend-Entwicklung > C++ > Wie kann ich ein Prozesshandle nach Namen in C abrufen?

Wie kann ich ein Prozesshandle nach Namen in C abrufen?

Susan Sarandon
Freigeben: 2024-11-20 18:25:15
Original
566 Leute haben es durchsucht

How Can I Retrieve a Process Handle by Name in C  ?

Prozess-Handle nach Namen in C abrufen

In C kann es vorkommen, dass Sie einen Prozess anhand seines Namens manipulieren müssen. Beispielsweise möchten Sie möglicherweise einen Prozess namens „example.exe“ beenden, ohne auf Fensterhandles angewiesen zu sein. Diese Frage befasst sich mit diesem speziellen Szenario und stellt eine Lösung vor.

Um das Prozesshandle anhand seines Namens abzurufen, können wir die Windows-API-Funktionen CreateToolhelp32Snapshot und Process32Next nutzen. Hier ist ein Codeausschnitt, der diesen Ansatz demonstriert:

#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>

int main() {
  // Create a snapshot of running processes
  HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  // Iterate over the processes
  PROCESSENTRY32 entry;
  entry.dwSize = sizeof(PROCESSENTRY32);
  if (Process32First(snapshot, &entry) == TRUE) {
    while (Process32Next(snapshot, &entry) == TRUE) {
      // Check if this is the process we want
      if (strcmp(entry.szExeFile, "example.exe") == 0) {
        // Open a handle to the process
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
        // Perform desired operations on the process
        CloseHandle(hProcess);  // Close the handle
      }
    }
  }

  CloseHandle(snapshot);  // Close the snapshot handle
  return 0;
}
Nach dem Login kopieren

Diese Lösung durchläuft alle laufenden Prozesse und vergleicht ihre ausführbaren Namen mit „example.exe“. Sobald eine Übereinstimmung gefunden wird, wird ein Handle für diesen Prozess abgerufen und kann zum Ausführen von Vorgängen wie der Beendigung (über TerminateProcess) verwendet werden.

Hinweis: Wenn Sie PROCESS_ALL_ACCESS in OpenProcess verwenden möchten , müssen Sie möglicherweise die Berechtigungen Ihres Prozesses erhöhen, indem Sie die Berechtigung SE_DEBUG_NAME aktivieren. Der Code dafür ist unten dargestellt:

void EnableDebugPriv() {
  // Enable debug privilege
  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);
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich ein Prozesshandle nach Namen in C abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage