Partilhar 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 não assinado.

  • Uma classe incorporada. Uma classe incorporada é 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 variável de um tipo de dados básico ou classe incorporada.

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 booleano ou uint8 deve ser alinhado em um limite de 1 byte. Um item sint16, uint16 ou string deve ser alinhado em uma fronteira 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 incorporada deve ser alinhada com base no alinhamento natural da classe incorporada, que é definida como o maior elemento dentro da classe incorporada. Por exemplo, se uma classe incorporada tiver um uint64, a classe deve ser alinhada em um limite de 8 bytes. O alinhamento do item de dados WMI segue as mesmas convenções da opção /Zp8 no compilador Microsoft C.

Um gravador de driver não precisa necessariamente definir itens de dados em um bloco diferente dos itens necessários InstanceName e Ative. Por exemplo, um bloco de eventos vazio pode servir como 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 dos dados Alinhamento (em bytes)

string

Um USHORT especificando o comprimento da cadeia de caracteres em bytes, seguido pelos dados da cadeia de caracteres Unicode. Os dados da string podem, opcionalmente, incluir um zero de terminação seguido por caracteres de preenchimento. Em caso afirmativo, 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 string for estritamente menor do que o tamanho do buffer, o driver pode preencher o restante da string com zeros.

2

boolean

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

1

sint8

Inteiro de 8 bits assinado

1

uint8

Inteiro de 8 bits não assinado

1

sint16

Inteiro de 16 bits assinado

2

uint16

Inteiro de 16 bits não assinado

2

sint32

Inteiro de 32 bits assinado

4

uint32

Inteiro de 32 bits não assinado

4

sint64

Inteiro de 64 bits assinado

8

uint64

Inteiro de 64 bits não assinado

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:

AAAAMMDDHHMMSS.MMMMMMSUTC

onde:

aaaa é o ano de 4 dígitos

mm é o mês de 2 dígitos

dd é o dia de 2 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 mais (+) ou sinal de menos (-), 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 é zero (000), o valor datetime é um intervalo.

Os valores devem ser preenchidos com zeros. Os campos que não são significativos podem ser preenchidos com asteriscos (*).

2