WNODE_HEADER Struktur (wmistr.h)

Die WNODE_HEADER Struktur ist das erste Element aller anderen WNODE_XXX-Strukturen . Es enthält Informationen, die allen solchen Strukturen gemeinsam sind.

Syntax

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;

Member

BufferSize

Dieses Element gibt die Größe des Nichtpagedpuffers an, um alle WNODE_XXX-Daten zu empfangen, die zurückgegeben werden sollen, einschließlich dieser WNODE_HEADER Struktur, zusätzliche Elemente einer WNODE_XXX-Struktur des Typs, der durch Flags angegeben ist, und alle WMI- oder Treiberdaten, die diese Struktur begleiten.

ProviderId

Wenn Flags auf WNODE_FLAG_EVENT_ITEM oder WNODE_FLAG_EVENT_REFERENCE festgelegt ist, sollte ProviderId die ID des dem Geräteobjekt zugeordneten WMI-Anbieters enthalten. Sie können den ProviderId-Wert abrufen, indem Sie IoWMIDeviceObjectToProviderId aufrufen. Wenn Flags auf einen anderen Wert festgelegt ist, ist dieses Element reserviert.

DUMMYUNIONNAME

DUMMYUNIONNAME.HistoricalContext

Dieses Mitglied speichert das Handle in der Ereignisablaufverfolgungssitzung.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version

Dieses Mitglied ist für WMI reserviert.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage

Dieses Mitglied ist für WMI reserviert.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.CountLost

Reserviert

DUMMYUNIONNAME2.KernelHandle

Dieses Mitglied ist für WMI reserviert.

DUMMYUNIONNAME2.TimeStamp

Dieses Element gibt die Uhrzeit an, zu der ein Treiber die WNODE_XXX-Daten gesammelt hat. Dieser Zeitwert wird im absoluten Systemzeitformat ausgedrückt. Absolute Systemzeit ist die Anzahl von 100 Nanosekundenintervallen seit Beginn des Jahres 1601 im Gregorianischen Kalender. Ein Treiber kann KeQuerySystemTime aufrufen, um diesen Wert abzurufen. Wenn der Block in eine Protokolldatei geschrieben werden soll (WNODE_FLAG_LOG_WNODE), kann ein NT-Treiber auch WNODE_FLAG_USE_TIMESTAMP in Flags festlegen, um anzufordern, dass der Systemprotokollierer den Wert von TimeStamp unverändert lässt.

Guid

Dieses Element gibt die GUID an, die den dem WNODE_XXX zugeordneten Datenblock darstellt, der zurückgegeben werden soll.

ClientContext

Dieses Mitglied speichert den Uhrtyp für die Sitzung. Mögliche Werte sind in der folgenden Tabelle enthalten.

Wert Beschreibung
1 Leistungsindikatorwert (auch als QPC, QueryPerformanceCounter oder PerfCounter bezeichnet)
2 Systemzeitgeber
3 CPU-Zyklus

Flags

Dieses Element gibt den Typ der WNODE_XXX-Struktur an, die die WNODE_HEADER Struktur enthält:

WNODE_FLAG_ALL_DATA

Der Rest einer WNODE_ALL_DATA Struktur folgt der WNODE_HEADER Struktur im Puffer.

WMI legt dieses Kennzeichen in der WNODE_HEADER Struktur fest, die sie mit einer IRP_MN_QUERY_ALL_DATA Anforderung übergibt.

Ein Treiber legt dieses Kennzeichen in der WNODE_HEADER Struktur eines Ereignisses fest, das aus allen Instanzen eines Datenblocks besteht. Wenn die Größe des Datenblocks für alle Instanzen identisch ist, legt ein Treiber auch WNODE_FLAG_FIXED_INSTANCE_SIZE fest.

WNODE_FLAG_EVENT_ITEM

Ein Treiber legt dieses Kennzeichen fest, um anzugeben, dass die WNODE_XXX-Struktur als Ereignis generiert wurde. Dieses Kennzeichen ist nur gültig, wenn auch WNODE_FLAG_ALL_DATA, WNODE_FLAG_SINGLE_INSTANCE oder WNODE_FLAG_SINGLE_ITEM festgelegt sind.

WNODE_FLAG_EVENT_REFERENCE

Der Rest einer WNODE_EVENT_REFERENCE Struktur folgt der WNODE_HEADER Struktur im Puffer.

Ein Treiber legt dieses Kennzeichen fest, wenn es ein Ereignis generiert, das größer als die maximale Größe ist, die in der Registrierung für ein Ereignis angegeben ist. WMI verwendet die Informationen in der WNODE_EVENT_REFERENCE Struktur, um die Ereignisdaten anzufordern und eine solche Anforderung entsprechend dem Wert von WNODE_FLAG_SEVERITY_MASK zu planen.

WNODE_FLAG_METHOD_ITEM

Der Rest einer WNODE_METHOD_ITEM Struktur folgt der WNODE_HEADER Struktur im Puffer.

WMI legt dieses Kennzeichen in der WNODE_HEADER Struktur fest, die sie mit einer IRP_MN_EXECUTE_METHOD-Anforderung übergibt.

WNODE_FLAG_SINGLE_INSTANCE

Der Rest einer WNODE_SINGLE_INSTANCE Struktur folgt der WNODE_HEADER Struktur im Puffer.

WMI legt dieses Kennzeichen in der WNODE_HEADER Struktur fest, die mit einer Anforderung zur Abfrage oder Änderung einer Instanz übergeben wird.

Ein Treiber legt dieses Kennzeichen in der WNODE_HEADER Struktur eines Ereignisses fest, das aus einer einzelnen Instanz eines Datenblocks besteht.

WNODE_FLAG_SINGLE_ITEM

Der Rest einer WNODE_SINGLE_INSTANCE Struktur folgt der WNODE_HEADER Struktur im Puffer.

WMI legt dieses Kennzeichen in der WNODE_HEADER Struktur fest, die mit einer Anforderung zum Ändern eines Elements übergeben wird.

Ein Treiber legt dieses Kennzeichen in der WNODE_HEADER Struktur eines Ereignisses fest, das aus einem einzelnen Datenelement besteht.

WNODE_FLAG_TOO_SMALL

Der Rest einer WNODE_TOO_SMALL Struktur folgt der WNODE_HEADER Struktur im Puffer.

Ein Treiber legt dieses Kennzeichen fest, wenn es eine WNODE_TOO_SMALL Struktur übergibt, die angibt, dass der Puffer für alle WNODE_XXX-Daten zu klein ist, um zurückgegeben werden zu können.

Darüber hinaus können Flags mit mindestens einem der folgenden Kennzeichen festgelegt werden, die zusätzliche Informationen zum WNODE_XXX bereitstellen:

WNODE_FLAG_FIXED_INSTANCE_SIZE

Alle Instanzen eines Datenblocks sind dieselbe Größe. Dieses Kennzeichen ist nur gültig, wenn WNODE_FLAG_ALL_DATA auch festgelegt ist.

WNODE_FLAG_INSTANCES_SAME

Die Anzahl der Instanzen und die Namen der dynamischen Instanz in einer WNODE_ALL_DATA Struktur, die zurückgegeben werden soll, sind identisch mit denen, die aus der vorherigen WNODE_ALL_DATA-Abfrage zurückgegeben werden. Dieses Kennzeichen ist nur gültig, wenn WNODE_FLAG_ALL_DATA auch festgelegt ist. Dieses Kennzeichen wird für Datenblöcke ignoriert, die mit statischen Instanznamen registriert sind.

Für eine optimierte Leistung sollte ein Treiber dieses Kennzeichen festlegen, wenn änderungen an der Anzahl oder namen seiner Datenblöcke nachverfolgt werden können. WMI kann dann die verarbeitung überspringen, die erforderlich ist, um dynamische Instanznamen zu erkennen und zu aktualisieren.

WNODE_FLAG_STATIC_INSTANCE_NAMES

Die zurückgegebenen WNODE_XXX-Daten enthalten keine Instanznamen.

WMI legt dieses Kennzeichen fest, bevor WNODE_XXX-Daten für Datenblöcke angefordert werden, die mit statischen Instanznamen registriert sind. Nachdem der zurückgegebene WNODE_XXX vom Treiber empfangen wurde, füllt WMI die bei der Registrierung angegebenen statischen Instanznamen aus, bevor der zurückgegebene WNODE_XXX an einen Datenverbraucher übergeben wird.

WNODE_FLAG_PDO_INSTANCE_NAMES

Statische Instanznamen basieren auf der Geräteinstanz-ID des PDO für das Gerät. Ein Treiber fordert solche Namen an, indem WMIREG_FLAG_INSTANCE_PDO in der WMIREGGUID festgelegt wird, die zum Registrieren des Blocks verwendet wird.

WMI legt dieses Kennzeichen fest, bevor WNODE_XXX-Daten für Datenblöcke angefordert werden, die mit PDO-basierten Instanznamen registriert sind.

WNODE_FLAG_SEVERITY_MASK

Der vom Treiber bestimmte Schweregrad des Ereignisses, das einem zurückgegebenen WNODE_EVENT_REFERENCE zugeordnet ist, wobei 0x00 die am wenigsten schwere und 0xff angibt, die die schwerste Stufe angibt.

WMI verwendet den Wert dieses Flags, um seine Anforderungen für die Ereignisdaten zu priorisieren.

WNODE_FLAG_USE_TIMESTAMP

Der Systemprotokollierer sollte den Vom Treiber festgelegten TimeStamp-Wert nicht ändern.

Ein NT-Treiber kann auch Flags auf einen oder mehrere der folgenden Werte festlegen, damit Ereignisblöcke in eine Systemprotokolldatei geschrieben werden:

WNODE_FLAG_LOG_WNODE

Ein Ereignisblock soll an den Systemprotokollierer gesendet werden. Der Ereignisheader ist eine Standardstruktur WNODE_HEADER . Wenn der Treiber WNODE_FLAG_TRACED_GUID löscht, wird der Block auch an WMI gesendet, um Datenkunden zu übermitteln, die das Ereignis aktiviert haben. Der Treiber muss den WNODE_XXX aus dem Poolspeicher zuordnen. WMI gibt den Speicher frei, nachdem das Ereignis an Datenkunden geliefert wurde.

WNODE_FLAG_TRACED_GUID

Ein Ereignisblock muss nur an den Systemprotokollierer gesendet werden. Es wird nicht an WMI-Datenkunden gesendet. Der Ereignisheader ist eine EVENT_TRACE_HEADER Struktur, die in Evntrace.h deklariert ist, anstelle einer WNODE_HEADER. Der Treiber muss Speicher für die WNODE_XXX zuweisen und nach dem Zurückgeben von IoWMIWriteEvent freigeben. Der Treiber kann diesen Speicher entweder aus dem Stapel zuordnen oder um den Aufwand für die Zuweisung und Freisetzung des Arbeitsspeichers aus dem lokalen Speicher des Treibers zu minimieren, wenn der Treiber einen eigenen Threadpool erstellt und verwaltet.

WNODE_FLAG_USE_GUID_PTR

Das Guid-Element verweist auf eine GUID im Arbeitsspeicher, anstatt die GUID selbst zu enthalten. Der Systemprotokollierer leitet den Zeiger ab, bevor die Daten an den Verbraucher übergeben werden. Dieses Kennzeichen ist nur gültig, wenn auch WNODE_FLAG_LOG_WNODE oder WNODE_FLAG_TRACED_GUID festgelegt sind.

WNODE_FLAG_USE_MOF_PTR

Daten, die den festen Membern einer WNODE_XXX-Struktur folgen, bestehen aus einem Array von MOF_FIELD Strukturen, die in Evntrace.h definiert sind, die Zeiger auf Daten und Größen enthalten, anstatt die Daten selbst. Das Array kann bis zu MAX_MOF_FIELD Elemente enthalten. Der Systemprotokollierer leitet die Zeiger ab, bevor die Daten an den Verbraucher übergeben werden. Diese Kennzeichnung ist nur für Blöcke gültig, die mit WMIREG_FLAG_TRACED_GUID registriert sind.

Bemerkungen

In einer IRP_MN_CHANGE_XXX - oder IRP_MN_EXECUTE_METHOD-Anforderung gibt BufferSize im IRP die maximale Größe in Bytes des Ausgabepuffers an, während BufferSize in der Eingabe WNODE_HEADER für eine solche Anforderung die Größe der Eingabedaten im Puffer angibt.

Anforderungen

   
Header wmistr.h (include Wmistr.h)

Siehe auch

IoWMIDeviceObjectToProviderId

IoWMIWriteEvent

KeQuerySystemTime

WNODE_ALL_DATA

WNODE_EVENT_ITEM

WNODE_EVENT_REFERENCE

WNODE_METHOD_ITEM

WNODE_SINGLE_INSTANCE

WNODE_SINGLE_ITEM

WNODE_TOO_SMALL