グローバル ロガー セッションにログ記録する方法
グローバル ロガー トレース セッションにログを記録するようにドライバーを構成するには、次の手順に従います。
次の定義をドライバー コードに追加します。 WPP_CONTROL_GUIDS マクロ定義と トレース メッセージ ヘッダー ファイルの include ステートメントの間に定義を挿入します。
#define WPP_GLOBALLOGGER
Tracelog を使用して、グローバル ロガー トレース セッションを構成します。 もっとも簡単なコマンドは次のようになります。
tracelog -start GlobalLogger
グローバル ロガー トレース セッションを構成するためのパラメーターを含む完全な手順については、「Tracelog コマンド構文」および「グローバル ロガー トレース セッション」を参照してください。
例については、「例 13: グローバル ロガー セッションの作成」を参照してください。
このコマンドはトレース セッションを作成して構成しますが、システムを再起動するまでセッションは開始されません (手順 5)。
HKLM\System\CurrentControlSet\Control\WMI\GlobalLogger サブキーの下に、トレース プロバイダーの コントロール GUID という名前のサブキーを追加します。 Windows Vista 以降のバージョンの Windows では、コントロール GUID は中かっこ ( {} ) で囲む必要があります。
tracelog -start GlobalLogger コマンドは、 GlobalLogger サブキーをレジストリに追加します。 ControlGUID サブキーは、グローバル ロガー トレース セッションの トレース プロバイダー としてドライバーを確立します。
たとえば、Windows XP を実行しているコンピューターでグローバル ロガー トレース セッションにログを記録するように Tracedrv サンプル ドライバーを構成するには、 Tracedrv コントロール GUID、d58c126f-b309-11d1-969e-0000f875a5bc: HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger\d58c126f-b309-11d1-969e-0000f875a5bc という名前のサブキーを追加します。
ソフトウェア トレース用に設計されたサンプル ドライバーである TraceDrv は、GitHub の Windows ドライバー サンプル リポジトリで入手できます。
トレース プロバイダーを構成するには、 ControlGUID サブキーに次のレジストリ エントリを追加します。 これらのエントリは省略可能であり、その値はドライバーによって定義されます。
エントリ名 データの種類 説明 フラグ
REG_DWORD
プロバイダーの トレース フラグ を指定します。
フラグの意味は、各トレース プロバイダーによって個別に決定されます。 通常、フラグは、段階的に詳細になるレポート レベルを表します。
Level
REG_DWORD
プロバイダーの トレース レベル を指定します。
レベル 値の意味は、各トレース プロバイダーによって個別に決定されます。 通常、トレース レベルはイベントの重大度 (情報、警告、またはエラー) を表します。
Flags エントリの名前は複数形で、 Level エントリの名前は単数形であることに注意してください。
- システムを再起動します。 これにより、グローバル ロガー トレース セッションが開始されます。
テストが完了したら、 ControlGUID サブキーを削除するか、 GlobalLogger サブキーの Start エントリ の値を 0 に設定します。 そうしないと、システムを再起動するたびにグローバル ロガー セッションが実行され、ドライバーがログに記録されます。
コメント
WPP_GLOBALLOGGERが存在する場合、WPP はレジストリを読み取るコードを追加し、グローバル ロガー セッションが実行されているかどうか、およびドライバーがグローバル ロガー セッションへのトレースを有効にしているかどうかを判断します。 このコードは、ドライバーが標準トレース セッションから受信する有効化通知の代わりに使用されます。
また、グローバル ロガー セッションではコールバック通知が提供されないため、Windows ではコールバックが発生したと見なされ、それに応じて続行されます。
WPP 定義では少量のコードのみが生成されるため、テスト後にコードから削除する必要はありません。