C でプロセス ハンドルを名前で取得する方法

Susan Sarandon
リリース: 2024-11-25 03:30:25
オリジナル
860 人が閲覧しました

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

C でのプロセス名によるプロセス ハンドルの取得

名前でプロセスのハンドルを取得するには、CreateToolhelp32Snapshot 関数を利用できます。システムのプロセスのスナップショットを取得します。この関数は、プロセス名など、実行中のプロセスに関する情報へのアクセスを提供します。

次のコード スニペットは、CreateToolhelp32SnapshotProcess32Next を使用してプロセスを検索する方法を示しています。名前を付けてそのハンドルを取得します:

#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;
}
ログイン後にコピー

必要な場合PROCESS_ALL_ACCESS にアクセスするには、SE_DEBUG_NAME 権限を一時的に有効にする必要がある場合があります。その方法は次のとおりです:

#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;
}
ログイン後にコピー

以上がC でプロセス ハンドルを名前で取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート