Driver-Defined éléments de données WMI

Un élément de données dans une définition de classe de données WMI ou d’un bloc d’événements peut être l’un des éléments suivants :

  • Type de données de base tel qu’une chaîne ou un entier non signé.

  • Classe incorporée. Une classe incorporée est utilisée uniquement comme élément de données dans une autre définition de classe et n’est pas exposée en tant que bloc de données ou bloc d’événements.

  • Tableau de longueur fixe ou de longueur variable d’un type de données de base ou d’une classe incorporée.

Lors de l’envoi d’un bloc de données à WMI, un pilote doit aligner le début du bloc sur une limite de 8 octets. Tous les éléments de données suivants dans le bloc doivent être alignés sur l’alignement correspondant pour le type de données. Une valeur booléenne ou uint8 doit être alignée sur une limite de 1 octet. Un élément sint16, uint16 ou chaîne doit être aligné sur une limite de 2 octets, et ainsi de suite. Les tableaux doivent être alignés en fonction du type de base du tableau. Un tableau d’octets doit être aligné sur une limite d’octets, un tableau d’uint64 doit être aligné sur une limite de 8 octets, et ainsi de suite. Une classe incorporée doit être alignée en fonction de l’alignement naturel de la classe incorporée qui est définie comme étant le plus grand élément au sein de la classe incorporée. Par exemple, si une classe incorporée a un uint64, la classe doit être alignée sur une limite de 8 octets. L’alignement des éléments de données WMI suit les mêmes conventions que le commutateur /Zp8 sur le compilateur Microsoft C.

Un enregistreur de pilote n’a pas nécessairement besoin de définir des éléments de données dans un bloc autre que les éléments InstanceName et Active requis. Par exemple, un bloc d’événements vide peut servir de notification qu’un événement s’est produit, sans données supplémentaires. Un bloc de données peut simplement énumérer instance noms en réponse à une demande de IRP_MN_QUERY_ALL_DATA.

Le tableau suivant répertorie les types de données MOF qui peuvent être utilisés pour définir des éléments dans un bloc de données ou d’événements WMI. Pour plus d’informations sur les types de données MOF, consultez la Microsoft Windows SDK.

Type de données Format de données Alignement (en octets)

string

USHORT spécifiant la longueur de chaîne en octets, suivie des données de chaîne Unicode. Les données de chaîne peuvent éventuellement inclure un 0 de fin suivi d’un remplissage. Si c’est le cas, la longueur de chaîne doit inclure la fin 0 et le remplissage. Les pilotes peuvent utiliser le qualificateur MaxLen pour spécifier la longueur maximale en caractères de la chaîne. Les pilotes qui spécifient une longueur de chaîne maximale peuvent utiliser une mémoire tampon de taille fixe pour contenir la chaîne. Si la chaîne est strictement plus petite que la taille de la mémoire tampon, le pilote peut remplir le reste de la chaîne avec des zéros.

2

Booléen

Valeur d’un octet où 0 est FALSE et toute valeur différente de zéro est TRUE

1

sint8

Entier 8 bits signé

1

uint8

Entier 8 bits non signé

1

sint16

Entier 16 bits signé

2

uint16

Entier 16 bits non signé

2

sint32

Entier 32 bits signé

4

uint32

Entier 32 bits non signé

4

sint64

Entier 64 bits signé

8

uint64

Entier 64 bits non signé

8

datetime

Chaîne Unicode de 25 caractères de longueur fixe qui spécifie un intervalle de date ou d’heure absolu. Une valeur datetime a le format suivant :

aaaammddhhmmsss.mmmmmmsutc

où :

yyyy est l’année à 4 chiffres

mm est le mois à 2 chiffres

dd est le jour à 2 chiffres du mois

hh est l’heure selon une horloge de 24 heures

mm est la minute

ss correspond aux secondes

mmmmmm est le nombre de microsecondes

s est un signe plus (+) ou un signe moins (-), indiquant si utc est un décalage positif ou négatif par rapport aux coordonnées temporelles universelles ; ou un signe deux-points (:), indiquant que la valeur datetime est un intervalle.

utc est le décalage en minutes par rapport aux coordonnées de temps universel. Si utc est égal à zéro (000), la valeur datetime est un intervalle.

Les valeurs doivent être non rembourrées. Les champs qui ne sont pas significatifs peuvent être remplis avec des astérisque (*).

2