WNODE_HEADER 構造体 (wmistr.h)

WNODE_HEADER構造体は、他のすべてのWNODE_XXX 構造体の最初のメンバーです。 これには、このようなすべての構造体に共通する情報が含まれています。

構文

typedef struct _WNODE_HEADER {
  ULONG BufferSize;
  ULONG ProviderId;
  union {
    ULONG64 HistoricalContext;
    struct {
      ULONG Version;
      ULONG Linkage;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  union {
    ULONG         CountLost;
    HANDLE        KernelHandle;
    LARGE_INTEGER TimeStamp;
  } DUMMYUNIONNAME2;
  GUID  Guid;
  ULONG ClientContext;
  ULONG Flags;
} WNODE_HEADER, *PWNODE_HEADER;

メンバー

BufferSize

このメンバーは、返されるWNODE_XXX データを受け取る非ページ バッファーのサイズ (バイト単位) を指定します。これには、このWNODE_HEADER構造体、Flags によって示される型のWNODE_XXX 構造体の追加メンバー、その構造に付随する WMI またはドライバーによって決定されたデータが含まれます。

ProviderId

Flags が WNODE_FLAG_EVENT_ITEM または WNODE_FLAG_EVENT_REFERENCE に設定されている場合、ProviderId には、デバイス オブジェクトに関連付けられている WMI プロバイダーの ID が含まれている必要があります。 ProviderId 値を取得するには、IoWMIDeviceObjectToProviderId を呼び出します。 Flags が他の値に設定されている場合、このメンバーは予約されています。

DUMMYUNIONNAME

DUMMYUNIONNAME.HistoricalContext

このメンバーは、イベント トレース セッションへのハンドルを格納します。

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version

このメンバーは WMI 用に予約されています。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage

このメンバーは WMI 用に予約されています。

DUMMYUNIONNAME2

DUMMYUNIONNAME2.CountLost

予約済み

DUMMYUNIONNAME2.KernelHandle

このメンバーは WMI 用に予約されています。

DUMMYUNIONNAME2.TimeStamp

このメンバーは、ドライバーが WNODE_XXX データを収集した時刻を示します。 この時刻の値は、システム時刻の絶対形式で表されます。 絶対システム時間は、グレゴリオ暦の 1601 年の開始以降の 100 ナノ秒間隔の数です。 ドライバーは 、KeQuerySystemTime を呼び出してこの値を取得できます。 ブロックをログ ファイル (WNODE_FLAG_LOG_WNODE) に書き込む場合は、システム ロガーが TimeStamp の値を変更せずに残すように要求するために、NT ドライバーが Flags にWNODE_FLAG_USE_TIMESTAMPを設定する場合もあります。

Guid

このメンバーは、返される WNODE_XXX に関連付けられているデータ ブロックを表す GUID を示します。

ClientContext

このメンバーは、セッションのクロックの種類を格納します。 使用可能な値を次の表に示します。

説明
1 パフォーマンス カウンター値 (QPC、QueryPerformanceCounter、PerfCounter とも呼ばれます)
2 システム タイマー
3 CPU サイクル

Flags

このメンバーは、WNODE_HEADER構造体を含む WNODE_XXX 構造体の型を示します。

WNODE_FLAG_ALL_DATA

WNODE_ALL_DATA構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

WMI は、IRP_MN_QUERY_ALL_DATA要求で渡す WNODE_HEADER 構造体にこのフラグ 設定します。

ドライバーは、データ ブロックのすべてのインスタンスで構成されるイベントの WNODE_HEADER 構造でこのフラグを設定します。 データ ブロック のサイズがすべてのインスタンスで同じ場合、ドライバーは WNODE_FLAG_FIXED_INSTANCE_SIZEも設定します。

WNODE_FLAG_EVENT_ITEM

ドライバーは、 WNODE_XXX 構造体がイベントとして生成されたことを示すように、このフラグを設定します。 このフラグは、WNODE_FLAG_ALL_DATA、WNODE_FLAG_SINGLE_INSTANCE、またはWNODE_FLAG_SINGLE_ITEMも設定されている場合にのみ有効です。

WNODE_FLAG_EVENT_REFERENCE

WNODE_EVENT_REFERENCE構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

ドライバーは、イベントのレジストリで指定された最大サイズを超えるイベントを生成するときに、このフラグを設定します。 WMI は 、WNODE_EVENT_REFERENCE 構造体の情報を使用してイベント データを要求し、WNODE_FLAG_SEVERITY_MASKの値に従ってこのような要求をスケジュールします。

WNODE_FLAG_METHOD_ITEM

WNODE_METHOD_ITEM 構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

WMI は、IRP_MN_EXECUTE_METHOD要求で渡す WNODE_HEADER 構造体にこのフラグ 設定します。

WNODE_FLAG_SINGLE_INSTANCE

WNODE_SINGLE_INSTANCE構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

WMI は、インスタンスのクエリまたは変更を要求して渡す WNODE_HEADER 構造体にこのフラグを設定します。

ドライバーは、データ ブロックの 1 つのインスタンスで構成されるイベントの WNODE_HEADER 構造でこのフラグを設定します。

WNODE_FLAG_SINGLE_ITEM

WNODE_SINGLE_INSTANCE構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

WMI は、アイテムを変更する要求と共に渡す WNODE_HEADER 構造体にこのフラグを設定します。

ドライバーは、1 つのデータ項目で構成されるイベントの WNODE_HEADER 構造でこのフラグを設定します。

WNODE_FLAG_TOO_SMALL

WNODE_TOO_SMALL構造体の残りの部分は、バッファー内のWNODE_HEADER構造体に従います。

ドライバーは、 バッファー が小さすぎてすべての WNODE_XXX データが返されることを示すWNODE_TOO_SMALL構造体を渡すときに、このフラグを設定します。

さらに、 フラグ は、 WNODE_XXX に関する追加情報を提供する次のフラグの 1 つ以上で設定できます。

WNODE_FLAG_FIXED_INSTANCE_SIZE

データ ブロックのすべてのインスタンスのサイズは同じです。 このフラグは、WNODE_FLAG_ALL_DATAも設定されている場合にのみ有効です。

WNODE_FLAG_INSTANCES_SAME

返される WNODE_ALL_DATA 構造体内のインスタンスの数と動的インスタンス名は、前の WNODE_ALL_DATA クエリから返されたものと同じです。 このフラグは、WNODE_FLAG_ALL_DATAも設定されている場合にのみ有効です。 このフラグは、静的インスタンス名で登録されたデータ ブロックでは無視されます。

パフォーマンスを最適化するために、ドライバーは、データ ブロックの数または名前の変更を追跡できる場合に、このフラグを設定する必要があります。 その後、WMI は動的インスタンス名の検出と更新に必要な処理をスキップできます。

WNODE_FLAG_STATIC_INSTANCE_NAMES

されるWNODE_XXX データには、インスタンス名は含まれません。

WMI は、静的インスタンス名で登録されているデータ ブロック WNODE_XXX データを要求する前に、このフラグを設定します。 ドライバーから返された WNODE_XXX を 受け取った後、WMI は、返された WNODE_XXX をデータ コンシューマーに渡す前に、登録時に指定された静的インスタンス名を入力します。

WNODE_FLAG_PDO_INSTANCE_NAMES

静的インスタンス名は、デバイスの PDO のデバイス インスタンス ID に基づいています。 ドライバーは、ブロックの登録に使用する WMIREGGUID に WMIREG_FLAG_INSTANCE_PDOを設定することで、このような名前を要求します。

WMI は、PDO ベースのインスタンス名に登録されているデータ ブロック WNODE_XXX データを要求する前に、このフラグを設定します。

WNODE_FLAG_SEVERITY_MASK

返された WNODE_EVENT_REFERENCEに関連付けられているイベントのドライバーによって決定された重大度レベル。0x00は最も重大度が低く、0xffは最も深刻なレベルを示します。

WMI では、このフラグの値を使用して、イベント データの要求に優先順位を付けます。

WNODE_FLAG_USE_TIMESTAMP

システム ロガーは、ドライバーによって設定された TimeStamp の値を変更しないでください。

NT ドライバーでは、イベント ブロックをシステム ログ ファイルに書き込むには、次の値の 1 つ以上に フラグ を設定することもできます。

WNODE_FLAG_LOG_WNODE

イベント ブロックは、システム ロガーに送信されます。 イベント ヘッダーは、標準の WNODE_HEADER 構造体です。 ドライバーがWNODE_FLAG_TRACED_GUIDクリアすると、イベントを有効にしたすべてのデータ コンシューマーに配信するために、ブロックも WMI に送信されます。 ドライバーは、プール メモリから WNODE_XXX を 割り当てる必要があります。 WMI は、データ コンシューマーにイベントを配信した後、メモリを解放します。

WNODE_FLAG_TRACED_GUID

イベント ブロックは、システム ロガーにのみ送信されます。 WMI データ コンシューマーには送信されません。 イベント ヘッダーは 、WNODE_HEADER ではなく Evntrace.h で宣言された EVENT_TRACE_HEADER構造体です。 ドライバーは 、WNODE_XXX のメモリを割り当て、 IoWMIWriteEvent が返された後に解放する必要があります。 ドライバーは、スタックから、またはドライバーが独自のスレッド プールを作成し、維持する場合は、ドライバーのスレッド ローカル 記憶域から、メモリの割り当てと解放のオーバーヘッドを最小限に抑えるために、このようなメモリを割り当てることができます。

WNODE_FLAG_USE_GUID_PTR

Guid メンバーは、GUID 自体を含むのではなく、メモリ内の GUID を指します。 システム ロガーは、コンシューマーにデータを渡す前にポインターを逆参照します。 このフラグは、WNODE_FLAG_LOG_WNODEまたはWNODE_FLAG_TRACED_GUIDも設定されている場合にのみ有効です。

WNODE_FLAG_USE_MOF_PTR

WNODE_XXX 構造体の固定メンバーに続くデータは、Evntrace.h で定義されたMOF_FIELD構造体の配列で構成され、データ自体ではなく、データとサイズへのポインターが含まれます。 配列には、最大MAX_MOF_FIELD要素を含めることができます。 システム ロガーは、コンシューマーにデータを渡す前にポインターを逆参照します。このフラグは、WMIREG_FLAG_TRACED_GUIDに登録されているブロックに対してのみ有効です。

注釈

IRP_MN_CHANGE_XXX またはIRP_MN_EXECUTE_METHOD要求では、IRP の BufferSize は出力バッファーの最大サイズ (バイト単位) を示し、このような要求の入力WNODE_HEADERの BufferSize はバッファー内の入力データのサイズをバイト単位で示します。

要件

要件
Header wmistr.h (Wmistr.h を含む)

こちらもご覧ください

IoWMIDeviceObjectToProviderId

IoWMIWriteEvent

KeQuerySystemTime

WNODE_ALL_DATA

WNODE_EVENT_ITEM

WNODE_EVENT_REFERENCE

WNODE_METHOD_ITEM

WNODE_SINGLE_INSTANCE

WNODE_SINGLE_ITEM

WNODE_TOO_SMALL