C での Win32 プロセスの作成と終了の検出
PsSetCreateProcessNotifyRoutine() API を使用してカーネル モード ドライバーを実装するのが一般的な方法です。 Win32 プロセスの作成または終了に関する通知。ただし、C の Win32 API 関数を利用する代替アプローチはありますか?
Win32 API の制限
無限ループでアクティブなプロセスのリストをクエリすることは理想的ではありませんリソースの消費量が多いため、解決策が見つかりません。残念ながら、カーネル モード ドライバーのアプローチと同じ完全な機能を提供するネイティブ Win32 API 関数はありません。
Windows Management Instrumentation (WMI)
WMI は、プロセスイベントを監視するための潜在的なソリューション。プロセス名などの特定の基準に基づいてプロセスの作成と終了を追跡できます。ただし、WMI はカーネル モード ドライバーに比べてオーバーヘッドが高くなる可能性があります。
WaitOrTimerCallback を使用した代替アプローチ
プロセス終了の追跡が主な目的の場合、より軽量で効率的な方法アプローチが利用可能です:
VOID CALLBACK WaitOrTimerCallback( _In_ PVOID lpParameter, _In_ BOOLEAN TimerOrWaitFired ) { MessageBox(0, L"The process has exited.", L"INFO", MB_OK); return; } DWORD dwProcessID = 1234; HANDLE hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID); HANDLE hNewHandle; RegisterWaitForSingleObject(&hNewHandle, hProcHandle, WaitOrTimerCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
このコードは、次を使用してコールバック関数を登録します。 RegisterWaitForSingleObject()。 hProcHandle で識別されたプロセスが終了すると、登録されたコールバックが実行され、WaitOrTimerCallback 関数が呼び出され、メッセージ ボックス通知が表示されます。
以上がWin32 API を使用してユーザー モードでプロセスの作成と終了を監視できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。