Freigeben über


Driver-Defined WMI-Datenelemente

Ein Datenelement in einer Klassendefinition von WMI-Daten oder -Ereignisblöcken kann eines der folgenden sein:

  • Ein einfacher Datentyp, z. B. eine Zeichenfolge oder eine ganzzahlige Zahl ohne Vorzeichen.

  • Eine eingebettete Klasse. Eine eingebettete Klasse wird nur als Datenelement in einer anderen Klassendefinition verwendet und nicht als Daten- oder Ereignisblock verfügbar gemacht.

  • Ein Array mit fester oder variabler Länge eines einfachen Datentyps oder einer eingebetteten Klasse.

Beim Senden eines Datenblocks an WMI muss ein Treiber den Anfang des Blocks an einer 8-Byte-Grenze ausrichten. Alle nachfolgenden Datenelemente im Block müssen an der entsprechenden Ausrichtung für den Datentyp ausgerichtet werden. Ein boolescher Oder ein uint8-Wert sollte an einer 1-Byte-Grenze ausgerichtet werden. Ein sint16-, uint16- oder Zeichenfolgenelement sollte an einer 2-Byte-Grenze ausgerichtet werden usw. Arrays sollten basierend auf dem Basistyp des Arrays ausgerichtet werden. Ein Array von Bytes sollte an einer Bytegrenze ausgerichtet werden, ein Array von uint64 sollte an einer 8-Byte-Grenze ausgerichtet werden usw. Eine eingebettete Klasse sollte basierend auf der natürlichen Ausrichtung der eingebetteten Klasse ausgerichtet werden, die als das größte Element innerhalb der eingebetteten Klasse definiert ist. Wenn eine eingebettete Klasse beispielsweise über einen uint64-Wert verfügt, sollte die Klasse an einer 8-Byte-Grenze ausgerichtet werden. Die WMI-Datenelementausrichtung folgt den gleichen Konventionen wie der / Zp8-Schalter auf dem Microsoft C-Compiler.

Ein Treiberschreiber muss nicht unbedingt Datenelemente in einem anderen Block als die erforderlichen Elemente InstanceName und Active definieren. Ein leerer Ereignisblock kann beispielsweise als Benachrichtigung dienen, dass ein Ereignis ohne zusätzliche Daten aufgetreten ist. Oder ein Datenblock listet einfach instance Namen als Reaktion auf eine IRP_MN_QUERY_ALL_DATA Anforderung auf.

In der folgenden Tabelle sind die MOF-Datentypen aufgeführt, die zum Definieren von Elementen in einem WMI-Daten- oder Ereignisblock verwendet werden können. Weitere Informationen zu MOF-Datentypen finden Sie im Microsoft Windows SDK.

Datentyp Datenformat Ausrichtung (in Bytes)

string

Ein USHORT, das die Zeichenfolgenlänge in Bytes angibt, gefolgt von den Unicode-Zeichenfolgendaten. Die Zeichenfolgendaten können optional ein beendendes 0 und anschließendes Auffüllen enthalten. Wenn ja, muss die Zeichenfolgenlänge die endende 0 und die Auffüllung enthalten. Treiber können den MaxLen-Qualifizierer verwenden, um die maximale Länge in Zeichen der Zeichenfolge anzugeben. Treiber, die eine maximale Zeichenfolgenlänge angeben, können einen Puffer mit fester Größe verwenden, um die Zeichenfolge aufzunehmen. Wenn die Zeichenfolge streng kleiner als die Größe des Puffers ist, kann der Treiber den Rest der Zeichenfolge mit Nullen unterbinden.

2

boolean

Ein Ein-Byte-Wert, bei dem 0 false und ein beliebiger Nicht-Wert TRUE ist.

1

sint8

Ganze 8-Bit-Zahl mit Vorzeichen

1

uint8

8-Bit-Ganzzahl ohne Vorzeichen

1

sint16

Ganze 16-Bit-Zahl mit Vorzeichen

2

uint16

16-Bit-Ganzzahl ohne Vorzeichen

2

sint32

Eine 32-Bit-Ganzzahl mit Vorzeichen

4

uint32

32-Bit Ganzzahl ohne Vorzeichen

4

sint64

64-Bit-Ganzzahl mit Vorzeichen

8

uint64

64-Bit-Ganzzahl ohne Vorzeichen

8

datetime

Eine Unicode-Zeichenfolge mit fester Länge mit 25 Zeichen, die ein absolutes Datums- oder Uhrzeitintervall angibt. Ein datetime-Wert hat das folgende Format:

jjjjmmddhhmmss.mmmmmmmmsutc

Dabei gilt:

JJJJ ist das 4-stellige Jahr

mm ist der 2-stellige Monat

dd ist der 2-stellige Tag des Monats

hh ist die Stunde nach einer 24-Stunden-Uhr

mm ist die Minute

ss ist die Sekunden

mmmmmm ist die Anzahl der Mikrosekunden

s ist ein Pluszeichen (+) oder minuszeichen (-), das angibt, ob utc ein positiver oder negativer Offset von Universal Time Coordinates ist. oder ein Doppelpunkt (:), der angibt, dass der datetime-Wert ein Intervall ist.

utc ist der Offset in Minuten von Universal Time Coordinates. Wenn utc null (000) ist, ist der datetime-Wert ein Intervall.

Die Werte müssen mit null aufgefüllt sein. Felder, die nicht signifikant sind, können mit Sternchen (*) gefüllt werden.

2