Compartilhar via


Driver-Defined itens de dados WMI

Um item de dados em uma definição de classe de dados WMI ou bloco de eventos pode ser um dos seguintes:

  • Um tipo de dados básico, como uma cadeia de caracteres ou um inteiro sem sinal.

  • Uma classe inserida. Uma classe inserida é usada apenas como um item de dados em outra definição de classe e não é exposta como um bloco de dados ou bloco de eventos.

  • Uma matriz de comprimento fixo ou de comprimento variável de um tipo de dados básico ou classe inserida.

Ao enviar um bloco de dados para o WMI, um driver deve alinhar o início do bloco em um limite de 8 bytes. Todos os itens de dados subsequentes no bloco devem ser alinhados no alinhamento correspondente para o tipo de dados. Um booliano ou uint8 deve ser alinhado em um limite de 1 byte. Um item sint16, uint16 ou string deve ser alinhado em um limite de 2 bytes e assim por diante. As matrizes devem ser alinhadas com base no tipo base da matriz. Uma matriz de bytes deve ser alinhada em um limite de bytes, uma matriz de uint64 deve ser alinhada em um limite de 8 bytes e assim por diante. Uma classe inserida deve ser alinhada com base no alinhamento natural da classe inserida que é definida como o maior elemento dentro da classe inserida. Por exemplo, se uma classe inserida tiver um uint64, a classe deverá ser alinhada em um limite de 8 bytes. O alinhamento do item de dados WMI segue as mesmas convenções que a opção /Zp8 no compilador C da Microsoft.

Um gravador de driver não precisa necessariamente definir itens de dados em um bloco diferente dos itens necessários InstanceName e Active. Por exemplo, um bloco de eventos vazio pode servir como uma notificação de que um evento ocorreu, sem dados adicionais. Ou um bloco de dados pode simplesmente enumerar nomes de instância em resposta a uma solicitação de IRP_MN_QUERY_ALL_DATA .

A tabela a seguir lista os tipos de dados MOF que podem ser usados para definir itens em um bloco de eventos ou dados WMI. Para obter mais informações sobre tipos de dados MOF, consulte o SDK do Microsoft Windows.

Tipo de dados Formato de dados Alinhamento (em bytes)

cadeia de caracteres

Um USHORT que especifica o comprimento da cadeia de caracteres em bytes, seguido pelos dados da cadeia de caracteres Unicode. Opcionalmente, os dados de cadeia de caracteres podem incluir uma terminação 0 seguida pelo preenchimento. Nesse caso, o comprimento da cadeia de caracteres deve incluir a terminação 0 e o preenchimento. Os drivers podem usar o qualificador MaxLen para especificar o comprimento máximo em caracteres da cadeia de caracteres. Os drivers que especificam um comprimento máximo de cadeia de caracteres podem usar um buffer de tamanho fixo para manter a cadeia de caracteres. Se a cadeia de caracteres for estritamente menor que o tamanho do buffer, o driver poderá preencher o restante da cadeia de caracteres com zeros.

2

booleano

Um valor de um byte em que 0 é FALSE e qualquer valor diferente de zero é TRUE

1

sint8

Inteiro de 8 bits com sinal

1

uint8

Inteiro de 8 bits sem sinal

1

sint16

Inteiro de 16 bits com sinal

2

uint16

Inteiro de 16 bits sem sinal

2

sint32

Inteiro assinado de 32 bits

4

uint32

Inteiro de 32 bits sem sinal

4

sint64

Inteiro assinado de 64 bits

8

uint64

Inteiro de 64 bits sem sinal

8

datetime

Uma cadeia de caracteres Unicode de 25 caracteres de comprimento fixo que especifica um intervalo absoluto de data ou hora. Um valor datetime tem o seguinte formato:

yyyymmddhhmmss.mmmmmmsutc

em que:

aaaa é o ano de 4 dígitos

mm é o mês de 2 dígitos

dd é o dia de dois dígitos do mês

hh é a hora de acordo com um relógio de 24 horas

mm é o minuto

ss são os segundos

mmmmmm é o número de microssegundos

s é um sinal de adição (+) ou sinal de subtração (-), indicando se utc é um deslocamento positivo ou negativo das Coordenadas de Tempo Universal; ou dois-pontos (:), indicando que o valor datetime é um intervalo.

utc é o deslocamento em minutos das Coordenadas de Tempo Universal. Se utc for zero (000), o valor de datetime será um intervalo.

Os valores devem ser adicionados a zero. Campos que não são significativos podem ser preenchidos com asteriscos (*).

2