Heim > Backend-Entwicklung > C++ > Hauptteil

Wie erhalte ich ein Prozesshandle in C anhand seines Namens?

Patricia Arquette
Freigeben: 2024-11-24 05:40:09
Original
615 Leute haben es durchsucht

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

Suchen nach einem Prozess anhand des Namens und Abrufen seines Handles in C

In vielen Fällen ist es für die Steuerung und Interaktion mit bestimmten Prozessen unerlässlich, den Prozessnamen zu kennen und sein Handle abzurufen Ausführen von Anwendungen. Dies wird umso wichtiger, wenn es um Prozesse geht, denen eine grafische Oberfläche fehlt und die nicht mithilfe fensterbasierter Techniken lokalisiert werden können. In solchen Szenarien ermöglicht die Möglichkeit, ein Prozesshandle anhand seines Namens abzurufen, eine direkte Manipulation und Steuerung dieser Anwendungen.

Um dies in C zu erreichen, können Sie die folgende Lösung verwenden:

#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...

                CloseHandle(hProcess);
            }
        }
    }

    CloseHandle(snapshot);

    return 0;
}
Nach dem Login kopieren

Dieser Code ruft das Handle eines Prozesses anhand seines ausführbaren Dateinamens ab. Es nutzt die Funktionen CreateToolhelp32Snapshot und Process32Next aus der tlhelp32-Bibliothek, um laufende Prozesse aufzuzählen und zu durchsuchen. Beim Auffinden des Zielprozesses durch Vergleichen seines ausführbaren Namens verwendet er OpenProcess, um das Prozesshandle abzurufen.

Wenn Sie jedoch Zugriff auf den Prozess über PROCESS_ALL_ACCESS benötigen, kann es zu Problemen mit verweigertem Zugriff kommen. Um dieses Problem zu beheben, müssen Sie die Berechtigung SeDebugPrivilege aktivieren, was über den API-Aufruf AdjustTokenPrivileges erfolgen kann. Hier ist ein modifizierter Code, der die notwendigen Schritte enthält:

#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();

    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    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...

                CloseHandle(hProcess);
            }
        }
    }

    CloseHandle(snapshot);

    return 0;
}
Nach dem Login kopieren

Durch die Integration dieser Ansätze können Sie ein Prozesshandle effektiv anhand seines Namens abrufen und Prozesse auch ohne grafische Oberfläche manipulieren.

Das obige ist der detaillierte Inhalt vonWie erhalte ich ein Prozesshandle in C anhand seines Namens?. 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