Heim > Backend-Entwicklung > C++ > Wie rufe ich ein Prozesshandle anhand seines Namens in C ab?

Wie rufe ich ein Prozesshandle anhand seines Namens in C ab?

Susan Sarandon
Freigeben: 2024-11-25 03:30:25
Original
913 Leute haben es durchsucht

How to Retrieve a Process Handle by its Name in C  ?

Abrufen eines Prozesshandles anhand des Prozessnamens in C

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

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