ホームページ >バックエンド開発 >C#.Net チュートリアル >プロセスとプロセス ID をトラバースするための C/C++ 小さなツール
いくつかの破壊的なプログラムを作成するときは、プロセスを走査して ID を抽出する必要があります
上記の関数では、まずいくつかの API を導入します
1.CreateToolhelp32Snapshout 関数
プロセス、モジュール、またはスレッドを取得しますsnapshot
の構文は次のとおりです:
HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );
最初のパラメータ: スナップショットにはシステムの一部が含まれています。パラメータは次のとおりです:
ここでは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; }
実行結果は次のとおりです
上記はC/C++トラバース用小ツールの内容ですプロセスとプロセス ID、その他の関連情報については、PHP 中国語 Web サイト (www.php.cn) の内容にご注意ください。