ホームページ >バックエンド開発 >C#.Net チュートリアル >プロセスとプロセス ID をトラバースするための C/C++ 小さなツール

プロセスとプロセス ID をトラバースするための C/C++ 小さなツール

黄舟
黄舟オリジナル
2017-01-22 14:06:072029ブラウズ

いくつかの破壊的なプログラムを作成するときは、プロセスを走査して ID を抽出する必要があります

上記の関数では、まずいくつかの API を導入します


1.CreateToolhelp32Snapshout 関数

プロセス、モジュール、またはスレッドを取得しますsnapshot

の構文は次のとおりです:

HANDLE WINAPI CreateToolhelp32Snapshot(  
  _In_ DWORD dwFlags,  
  _In_ DWORD th32ProcessID  
);

最初のパラメータ: スナップショットにはシステムの一部が含まれています。パラメータは次のとおりです:

プロセスとプロセス ID をトラバースするための C/C++ 小さなツール


プロセスとプロセス ID をトラバースするための C/C++ 小さなツール

ここではTH32CS_SNAPPROCESSを使用します

スナップショットにはすべてが含まれていますシステムプロセス内で。


2 つ目は PROCESSENTRY32 構造体に関するものです

構文は次のとおりです:

typedef struct tagPROCESSENTRY32 {  
  DWORD     dwSize;  
  DWORD     cntUsage;  
  DWORD     th32ProcessID;  
  ULONG_PTR th32DefaultHeapID;  
  DWORD     th32ModuleID;  
  DWORD     cntThreads;  
  DWORD     th32ParentProcessID;  
  LONG      pcPriClassBase;  
  DWORD     dwFlags;  
  TCHAR     szExeFile[MAX_PATH];  
} PROCESSENTRY32, *PPROCESSENTRY32;

これは、スナップショットが呼び出されたときにシステム アドレス空間内のプロセスによって読み取られるエントリを記述します。


ここでは szExeFile[MAX_PATH] と

th32ParentProcessID のみを紹介します: これは、プロセス作成後のプロセスの ID (親プロセス) です

szExeFile: プロセス内の実行可能ファイルの名前


以下はソースコードです。一部の関数は説明されていませんが、コメントや文字通りの意味で理解できます

#include <Windows.h>  
#include <stdio.h>  
#include <TlHelp32.h>  
  
int main()  
{  
    HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
    if (hProceessnap == INVALID_HANDLE_VALUE)  
    {  
        printf_s("创建进行快照失败\n");  
        return -1;  
    }  
    else  
    {  
        PROCESSENTRY32 pe32;  
        pe32.dwSize = sizeof(pe32);  
        BOOL hProcess = Process32First(hProceessnap, &pe32);  
        char buff[1024];  
        while (hProcess)  
        {  
            wsprintf(buff, "进程名:%s--------------------进程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID);  
            printf_s("%s\n", buff);  
            memset(buff, 0x00, 1024);  
            hProcess = Process32Next(hProceessnap, &pe32);  
        }  
    }  
    CloseHandle(hProceessnap);  
  
    return 0;  
}

実行結果は次のとおりです


プロセスとプロセス ID をトラバースするための C/C++ 小さなツール

上記はC/C++トラバース用小ツールの内容ですプロセスとプロセス ID、その他の関連情報については、PHP 中国語 Web サイト (www.php.cn) の内容にご注意ください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。