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 |