自動ロガー セッションの構成と開始
AutoLogger イベント トレース セッションは、オペレーティング システムのブート プロセスの早い段階で発生したイベントを記録します。 アプリケーションとデバイス ドライバーは、AutoLogger セッションを使用して、ユーザーがログインする前にトレースをキャプチャできます。 ディスク デバイス ドライバーなど、一部のデバイス ドライバーは、AutoLogger セッションの開始時に読み込まれていないことに注意してください。
AutoLogger は、次の点でグローバル ロガーとは異なります。
- 1 つ以上の AutoLogger セッションを指定できます (グローバル ロガーは、すべてのユーザーがイベントをログに記録する 1 つのセッションでした)。
- AutoLogger は、セッションの開始時にプロバイダーに有効化通知を送信します (グローバル ロガーはプロバイダーに有効な通知を送信しなかったため、イベントのログ記録を開始するために、プロバイダーは他の方法に依存して、グローバル ロガー セッションが開始されたかどうかを確認する必要がありました)。
- AutoLogger は NT カーネル ロガー イベントのログ記録をサポートしていません (EVENT_TRACE_PROPERTIES の EnableFlags メンバーを参照してください)。 NT カーネル ロガー イベントをログに記録するには、 グローバル ロガーを使用する必要があります。
グローバル ロガーの詳細については、「 グローバル ロガー セッションの構成と開始」を参照してください。
Note
ETW では、Windows Vista 以降の AutoLogger がサポートされています。 以前のオペレーティング システムで グローバル ロガー を使用します。
レジストリを使用して、AutoLogger セッションを構成します。 次のレジストリ キーがまだ存在しない場合は、追加します。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
次の例に示すように、 自動ロガー キーで、構成する各 AutoLogger セッションのキーを作成します。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
\Logger Session A
\Logger Session B
\Logger Session C
セッションごとに、セッションに対して有効にするプロバイダーごとにキーを作成します。 プロバイダーの GUID をキーとして使用します。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
\Logger Session A
\{ProviderGuid1}
\{ProviderGuid2}
\Logger Session B
\Logger Session C
次の表では、各 AutoLogger セッションに対して定義できる値について説明します。 これらのレジストリ値を指定するには、管理者特権が必要です。 Start と Guid の値は、AutoLogger セッションを開始するために必要な唯一の値です。その他のすべての値には、レジストリに値が存在しない場合に使用される既定の設定があります。 通常は、既定値を使用する必要があります。 ETW でサポートできない値を指定すると、ETW によって値がオーバーライドされます。
値 | 型 | 説明 |
---|---|---|
BufferSize | REG_DWORD | 各バッファーのサイズ (キロバイト単位)。 1 メガバイト未満にする必要があります。 ETW では、物理メモリのサイズを使用してこの値を計算します。 |
ClockType | REG_DWORD | 各イベントのタイム スタンプをログに記録するときに使用するタイマー。
Windows Vista 以降では、既定値は 1 (パフォーマンス カウンター値) です。 Windows Vista より前の既定値は 2 (システム タイマー) です。 |
DisableRealtimePersistence | REG_DWORD | リアルタイム永続化を無効にするには、この値を 1 に設定します。 既定値は、リアルタイム セッションの場合は 0 (有効) です。 リアルタイム永続化が有効になっている場合、コンピューターがシャットダウンされた時点までに配信されなかったリアルタイム イベントは保持されます。 その後、コンシューマーが次回セッションに接続すると、イベントがコンシューマーに配信されます。 |
FileCounter | REG_DWORD | この値を設定または変更しないでください。 この値は、 FileMax が指定されている場合にログ ファイル名をインクリメントするために使用されるシリアル番号です。 値が無効な場合は、1 と見なされます。 |
FileName | REG_SZ | ログ ファイルの完全修飾パス。 このファイルへのパスが存在する必要があります。 ログ ファイルはシーケンシャル ログ ファイルです。 パスは 1024 文字に制限されています。 FileName が指定されていない場合、イベントは %SystemRoot%\System32\LogFiles\WMI<sessionname.etl> に書き込まれます。 |
FileMax | REG_DWORD | ETW によって作成されるログ ファイルのインスタンスの最大数。
FileName で指定されたログ ファイルが存在する場合、ETW は FileCounter 値をファイル名に追加します。 たとえば、既定のログ ファイル名が使用されている場合、フォームは %SystemRoot%\System32\LogFiles\WMI<sessionname.etl> です。Nnnn。 コンピューターを初めて起動すると、ファイル名は <sessionname.etl.0001>、2 回目は <sessionname.etl.0002> などになります。 FileMax が 3 の場合、コンピューターの 4 回目の再起動時に、ETW はカウンターを 1 にリセットし、存在する場合は sessionname.etl.0001> を上書き<します。 サポートされているログ ファイルのインスタンスの最大数は 16 です。 この機能は 、EVENT_TRACE_FILE_MODE_NEWFILE ログ ファイル モードでは使用しないでください。 |
FlushTimer | REG_DWORD | トレース バッファーが強制的にフラッシュされる頻度 (秒単位)。 最小フラッシュ時間は 1 秒です。 この強制フラッシュは、バッファーがいっぱいになったときとトレース セッションが停止したときに発生する自動フラッシュに加えて行われます。 リアルタイム ロガーの場合、値 0 (既定値) は、フラッシュ時間が 1 秒に設定されることを意味します。 リアルタイム ロガーは、 LogFileMode が EVENT_TRACE_REAL_TIME_MODE に設定されている場合です。 既定値は 0 です。 既定では、バッファーは満杯の場合にのみフラッシュされます。 |
Guid | REG_SZ | セッションを一意に識別する GUID を含む文字列。 この値は必須です。 |
LogFileMode | REG_DWORD | 1 つ以上のログ モードを指定します。 使用可能な値については、「 ログ モード定数」を参照してください。 既定値は EVENT_TRACE_FILE_MODE_SEQUENTIAL です。 ログ ファイルに書き込む代わりに、 EVENT_TRACE_BUFFERING_MODE または EVENT_TRACE_REAL_TIME_MODEを指定できます。 EVENT_TRACE_BUFFERING_MODEを指定すると、ファイル システムが使用可能になったときにセッションの内容をディスクにフラッシュするコストを回避できます。 バッファー サイズは MinimumBuffers と BufferSize の積であるため、EVENT_TRACE_BUFFERING_MODEを使用すると、システムは MaximumBuffers 値を無視します。 自動ロガー セッションでは、 EVENT_TRACE_FILE_MODE_NEWFILE ログ モードはサポートされていません。 EVENT_TRACE_FILE_MODE_APPENDを指定する場合、BufferSize は明示的に指定する必要があり、ロガーと追加されるファイルの両方で同じである必要があります。 |
MaxFileSize | REG_DWORD | ログ ファイルの最大ファイル サイズ (メガバイト単位)。 循環ログ ファイル モードでない限り、最大サイズに達するとセッションは閉じられます。 制限を指定しない場合は、値を 0 に設定します。 既定値は、設定されていない場合は 100 MB です。 ファイルの最大サイズに達したときに発生する動作は、 LogFileMode の値によって異なります。 |
MaximumBuffers | REG_DWORD | 割り当てるバッファーの最大数。 通常、この値はバッファーの最小数に 20 を加えた値です。 ETW は、バッファー サイズと物理メモリのサイズを使用してこの値を計算します。 この値は 、MinimumBuffers の値以上である必要があります。 |
MinimumBuffers | REG_DWORD | 起動時に割り当てるバッファーの最小数。 指定できるバッファーの最小数は、プロセッサごとに 2 つのバッファーです。 たとえば、1 台のプロセッサ コンピューターでは、バッファーの最小数は 2 です。 |
Start | REG_DWORD | 次回コンピューターが再起動されるときに AutoLogger セッションを開始するには、この値を 1 に設定します。それ以外の場合は、この値を 0 に設定します。 |
状態 | REG_DWORD | AutoLogger の起動状態。 AutoLogger を起動できなかった場合、このキーの値は適切な Win32 エラー コードです。 AutoLogger が正常に開始された場合、このキーの値は ERROR_SUCCESS (0) になります。 |
ブート | REG_DWORD | この機能は、デバッグ シナリオ以外では使用しないでください。 このレジストリ キーが 1 に設定されている場合、自動ロガーはカーネルの初期化中に通常よりも早く開始され、多くの重要なカーネル サブシステムの初期化中にイベントをキャプチャできるようになります。 ただし、 このオプションを有効にすると、起動時間に悪影響を及 ぼし、自動ロガーに追加の制限が課されます。 この機能が有効になっている場合は、自動ロガー セッション GUID を設定 する必要 があり、他の多くの自動ロガー設定が機能しない可能性があります。 このキーは、Windows Server 2022 以降でサポートされています。 |
次の表では、セッションに対して有効にするプロバイダーごとに定義できる値について説明します。 これらのレジストリ値を指定するには、管理者特権が必要です。 ETW でサポートできない値を指定すると、ETW によって値がオーバーライドされます。
値 | 型 | 説明 |
---|---|---|
有効 | REG_DWORD | プロバイダーが有効になっているかどうかを判断します。 プロバイダーを有効にするには、この値を 1 に設定します。 プロバイダーを無効にするには、この値を 0 に設定します。 既定値は 0 です。 |
EnableFlags | REG_DWORD | プロバイダーがイベントを生成するイベントのクラスを指定するプロバイダー定義の値。 詳細については、EnableTrace 関数の EnableFlags パラメーターを参照してください。 プロバイダーが MatchAnyKeyword または MatchAllKeyword をサポートしていない場合は、この値の名前 を指定します。 |
EnableLevel | REG_DWORD | イベントに含まれる詳細レベルを指定するプロバイダー定義の値。 たとえば、この値を使用して、プロバイダーが生成するイベント (情報、警告、エラー) の重大度レベルを示すことができます。 定義済みのレベルの一覧については、EnableTraceEx 関数の level パラメーターを参照してください。 |
EnableProperty | REG_DWORD | ログ ファイルに次の項目の 1 つ以上を含めるには、この値を使用します。
|
MatchAnyKeyword | REG_QWORD | プロバイダーが書き込むイベントのカテゴリを決定するキーワードのビットマスク。 プロバイダーは、イベントのキーワード (keyword)ビットのいずれかが、このマスクに設定されているビットのいずれかと一致する場合に、イベントを書き込みます。 プロバイダーがすべてのイベントを書き込むよう指定するには、この値を 0 に設定します。 例については、 EnableTraceEx 関数の「解説」セクションを参照してください。 |
MatchAllKeyword | REG_QWORD | このビットマスクは省略可能です。 このマスクは、プロバイダーが書き込むイベントのカテゴリをさらに制限します。 イベントのキーワード (keyword)が MatchAnyKeyword 条件を満たしている場合、このマスク内のすべてのビットがイベントのキーワード (keyword)に存在する場合にのみ、プロバイダーはイベントを書き込みます。 MatchAnyKeyword が 0 の場合、このマスクは使用されません。 例については、 EnableTraceEx 関数の「解説」セクションを参照してください。 |
レジストリが変更されると、次回コンピューターが再起動されたときに AutoLogger セッションが開始されます。 AutoLogger セッションは、プロバイダーを有効にするために EnableTraceEx 関数を呼び出します。
AutoLogger セッションはシステムの起動時間を長くし、慎重に使用する必要があります。 ブート プロセス中に情報をキャプチャするサービスでは、AutoLogger セッションを使用する代わりに、コントローラー ロジックをそれ自体に追加することを検討する必要があります。
AutoLogger セッションを停止するには、 ControlTrace 関数を呼び出します。 関数に渡すセッション名は、レジストリでセッションを定義するために使用したレジストリ キーの名前です。
イベント トレース セッションの開始の詳細については、「イベント トレース セッションの 構成と開始」を参照してください。
プライベート ロガー セッションの開始の詳細については、「プライベート ロガー セッションの 構成と開始」を参照してください。
NT カーネル ロガー セッションの開始の詳細については、「NT カーネル ロガー セッション の構成と開始」を参照してください。