Win32 API を使用してユーザー モードでプロセスの作成と終了を監視できますか?

DDD
リリース: 2024-11-20 16:50:31
オリジナル
495 人が閲覧しました

Can Process Creation and Termination be Monitored in User Mode with Win32 APIs?

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 サイトの他の関連記事を参照してください。

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