PEVENT_CALLBACK
コールバックシグネチャ
void PEVENT_CALLBACK(
EVENT_TRACE* pEvent
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| pEvent | EVENT_TRACE* | イベント情報を格納する EVENT_TRACE 構造体へのポインター。 |
公式ドキュメント
ETW イベントコンシューマーは、トレース処理セッションからイベントを受け取るために このコールバックを実装します。このコールバックは新しいコードでは使用しないでください。 代わりに EventRecordCallback を実装してください。
PEVENT_CALLBACK 型は、このコールバック関数へのポインターです。 EventCallback は、アプリケーション定義の関数名のプレースホルダーです。
解説(Remarks)
このコールバックは、イベントに関する情報が不完全であり、 TdhGetEventInformation などのイベントデコード用ヘルパー API と互換性がないため、廃止されています。 EventCallback を実装する代わりに、 EventRecordCallback を実装してください。
ETW がイベントを配信するために呼び出す関数を指定するには、 OpenTrace 関数に渡す EVENT_TRACE_LOGFILE 構造体の EventCallback メンバーを設定します。
EventCallback 関数が ProcessTrace から不正なデータを受け取っている場合は、
OpenTrace に渡した EVENT_TRACE_LOGFILE 構造体の ProcessTraceMode
フィールドに指定したフラグをもう一度確認してください。EVENT_TRACE_LOGFILE の
EventCallback フィールドと EventRecordCallback フィールドは、共用体として
重なり合うメンバーです。ProcessTraceMode フィールドに
PROCESS_TRACE_MODE_EVENT_RECORD フラグが含まれている場合、ProcessTrace は
EventRecordCallback の関数シグネチャでコールバックを呼び出します。それ以外の場合、
ProcessTrace は EventCallback の関数シグネチャでコールバックを呼び出します。
OpenTrace を使用してトレース処理セッションを作成した後、 ProcessTrace 関数を呼び出して イベントの受信を開始します。
ProcessTrace がトレースのイベント処理を開始するとき、ログに記録されたイベントの
データではなく、トレースに関するデータ (メタデータ) を含む 1 つ以上の合成イベントで
コールバックを呼び出すことがあります。これらの合成イベントでは、Header.Guid に
EventTraceGuid が設定され、Header.Class.Type には合成イベントの内容に応じた値が
設定されます。たとえば、各トレースファイルの最初のイベントは、
TRACE_LOGFILE_HEADER
の情報を含む型 0 の合成イベントになります。
それ以外に受け取るすべてのイベントには、プロバイダー固有のイベントデータが含まれます。
受け取ったイベントの種類を判別するには、
EVENT_TRACE の Header.Guid
メンバーと Header.Class.Type メンバーを使用します。よく知られたイベントの種類に
ついてはデコード処理をハードコードすることもできますが、ほとんどのイベントは
\\root\wmi 名前空間にシステムへ登録された MOF スキーマ情報を使用して
デコードします。イベントの MOF スキーマを使用してイベントを解釈する方法については、
Consuming Events を参照してください。
例
EventCallback 関数の実装例については、 Retrieving Event Data Using MOF を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)