プロセスの暗黙の終了の監視
Windows 7 以降では、GFlags の [サイレント プロセス終了] タブを使用して、サイレント終了を監視するプロセスの名前を入力できます。
この監視機能のコンテキストでは、監視対象のプロセスが次のいずれかの方法で終了することを意味するために、サイレント終了という用語を使用します。
自己終了
監視対象のプロセスは、ExitProcess を呼び出すことによって自身を終了します。
クロスプロセス終了
2 番目のプロセスは、TerminateProcess を呼び出して監視対象プロセスを終了します。
監視機能は、プロセスの最後のスレッドが終了したときに発生する通常のプロセスの終了を検出しません。 監視機能は、カーネル モード コードによって開始されるプロセスの終了を検出しません。
サイレント終了監視用のプロセスを登録するには、GFlags で [サイレント プロセス終了] タブを開きます。 プロセス名をイメージとして入力し、Tab キーを押します。 [サイレント プロセス終了監視を有効にする] チェックボックスをオンにし、[適用] を選択します。 これにより、次のレジストリ エントリに FLG_MONITOR_SILENT_PROCESS_EXIT フラグが設定されます。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName\GlobalFlag
このフラグの詳細については、「サイレント プロセス終了監視を有効にする」を参照してください。
GFlags の [サイレント プロセス終了] タブの使用方法の詳細については、「サイレント プロセス終了監視の構成」を参照してください。
GFlags の [サイレント プロセス終了] タブでは、監視対象のプロセスがサイレントに終了するときに実行されるアクションを構成できます。 通知、イベントログ、ダンプファイルの作成を設定できます。 サイレント終了が検出されたときに起動されるプロセスを指定したり、モニターが無視するモジュールのリストを指定したりできます。 これらの設定のいくつかは、グローバルにも個別のアプリケーションにも使用できます。 グローバル設定は、サイレント終了監視用に登録したすべてのプロセスに適用されます。 アプリケーション設定は個々のプロセスに適用され、グローバル設定をオーバーライドします。
グローバル設定は、次のキーの下のレジストリに保存されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DebugObjectRPCEnabled
アプリケーション設定は、次のキーの下のレジストリに保存されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\ProcessName
レポートモード
レポート モード設定はアプリケーション設定として使用できますが、グローバル設定としては使用できません。 次のチェック ボックスを使用して、レポート モードを設定できます。
モニタープロセスの起動 ダンプ収集を有効にし、通知を有効にします。 ReportingMode レジストリ エントリは、次のフラグのビット単位の OR です。
フラグ | 値 | 意味 |
---|---|---|
LAUNCH_MONITORPROCESS | 0x1 | サイレント終了が検出されると、監視プロセス ([監視プロセス] ボックスで指定) が起動されます。 |
LOCAL_DUMP | 0x2 | サイレント終了が検出されると、監視対象プロセスのダンプ ファイルが作成されます。 クロスプロセス終了の場合、終了の原因となったプロセスのダンプ ファイルも作成されます。 |
NOTIFICATION | 0x4 | サイレント終了が検出されると、ポップアップ通知が表示されます。 |
自己終了を無視する
[自己終了を無視] 設定はアプリケーション設定として使用できますが、グローバル設定としては使用できません。 [自己終了を無視] チェック ボックスを使用して、自己終了を無視するかどうかを指定できます。
IgnoreSelfExits レジストリ エントリには、次のいずれかの値が含まれます。
値 | 意味 |
---|---|
0x0 | 自己終了とプロセス間終了の両方を検出して応答します。 |
0x1 | 自己終了は無視してください。 クロスプロセス終了を検出して対応します。 |
プロセスの監視
[プロセスの監視] テキスト ボックスにプロセス名とコマンド ライン パラメータを入力することで、監視プロセスを指定できます。 コマンドラインでは次の変数を使用できます。
変数 | 意味 |
---|---|
%e | 終了中のプロセスの ID。 これは、サイレントに終了した監視対象プロセスです。 |
%私 | 開始プロセスのID。 自己終了の場合はプロセスの終了と同じです。 クロスプロセス終了の場合、これは終了の原因となったプロセスの ID です。 |
%t | 開始スレッドのID。 これは終了の原因となったスレッドです。 |
[c] | ExitThread または TerminateThread に渡されるステータス コード。 |
たとえば、Monitor Process の次の値は、サイレント終了時に WinDbg が起動され、既存のプロセスにアタッチされることを指定します。
windbg -p %e
Monitor Process コマンド ラインは、MonitorProcess レジストリ エントリに保存されます。
ダンプフォルダーの場所
[ダンプ フォルダーの場所] テキスト ボックスを使用して、サイレント終了が検出されたときに書き込まれるダンプ ファイルの場所を指定できます。
ダンプ フォルダーの場所として入力した文字列は、LocalDumpFolder レジストリ エントリに保存されます。
ダンプ フォルダーの場所を指定しない場合、ダンプ ファイルはデフォルトの場所 (%TEMP%\Silent Process Exit) に書き込まれます。
ダンプフォルダーのサイズ
[ダンプ フォルダー サイズ] テキスト ボックスを使用して、ダンプ フォルダーに書き込むことができるダンプ ファイルの最大数を指定できます。 この値を 10 進整数として入力します。
ダンプ フォルダーのサイズに入力した値は、MaxNumberOfDumpFiles レジストリ エントリに保存されます。
デフォルトでは、書き込めるダンプ ファイルは 10 個に制限されています。
ダンプタイプ
[ダンプ タイプ] ドロップダウン リストを使用して、サイレント終了が検出されたときに書き込まれるダンプ ファイルのタイプ (マイクロ、ミニ、ヒープ、またはカスタム) を指定できます。
ダンプ タイプは DumpType レジストリ エントリに保存されます。これは MINIDUMP_TYPE 列挙体のメンバーのビット単位の OR です。 この列挙は、Windows 用デバッグ ツール パッケージに含まれる dbghelp.h で定義されます。
たとえば、ダンプ タイプとして Micro を選択し、DumpType レジストリ エントリの値が 0x88 であることがわかるとします。 値 0x88 は、次の 2 つの MINIDUMP_TYPE 列挙値のビット単位の OR です。
MiniDumpFilterModulePaths: 0x00000080
MiniDumpFilterMemory: 0x00000008
ダンプ タイプとして [カスタム] を選択した場合は、[カスタム ダンプ タイプ] ボックスに MINIDUMP_TYPE 列挙値の独自のビット単位の OR を入力します。 この値を 10 進整数として入力します。
モジュール無視リスト
「モジュール無視リスト」ボックスを使用して、サイレント終了が検出されたときに無視されるモジュールのリストを指定できます。 監視対象のプロセスがこのリスト内のモジュールのいずれかによって終了された場合、サイレント終了は無視されます。
[モジュール無視リスト] ボックスに入力したモジュールのリストは、ModuleIgnoreList レジストリ エントリに保存されます。
イベント ビューアでのプロセス終了レポートの読み取り
監視対象のプロセスがサイレントに終了すると、監視はイベント ビューアにエントリを作成します。 イベント ビューアを開くには、コマンドeventvwr.mscを入力します。 Windows ログ> アプリケーションに移動します。 プロセス終了モニターのソースを持つログ エントリを探します。