Home  >  Article  >  Backend Development  >  How to Retrieve a Process Handle by its Name in C ?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-25 03:30:25862browse

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

Retrieving a Process Handle by Process Name in C

To retrieve the handle of a process by its name, we can leverage the CreateToolhelp32Snapshot function to obtain a snapshot of the system's processes. This function provides access to information about running processes, including their process names.

The following code snippet demonstrates how to use CreateToolhelp32Snapshot and Process32Next to search for a process by name and retrieve its handle:

#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;
}

If you require PROCESS_ALL_ACCESS access, you may need to temporarily enable the SE_DEBUG_NAME privilege. Here's how you can do that:

#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;
}

The above is the detailed content of How to Retrieve a Process Handle by its Name in C ?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn