Поделиться через


Driver-Defined Элементы данных WMI

Элемент данных в определении класса данных или блока событий WMI может быть одним из следующих:

  • Базовый тип данных, например строка или целое число без знака.

  • Внедренный класс. Внедренный класс используется только в качестве элемента данных в определении другого класса и не предоставляется в качестве блока данных или блока событий.

  • Массив фиксированной длины или переменной длины базового типа данных или внедренного класса.

При отправке блока данных в WMI драйвер должен выровнять начало блока по 8-байтовой границе. Все последующие элементы данных в блоке должны соответствовать правильному выравниванию для типа данных. Логическое значение или uint8 должно быть выровнено по 1-байтовой границе. Элемент sint16, uint16 или string должен быть выровнен по границе 2-байтов и т. д. Массивы должны быть выровнены на основании базового типа массива. Массив байтов должен быть выровнен по границе байтов, массив uint64 должен быть выровнен по границе 8-байтов и т. д. Внедренный класс должен быть выровнен на основе естественного выравнивания внедренного класса, который определяется как самый большой элемент в внедренном классе. Например, если встроенный класс имеет uint64, то класс должен быть выровнен по 8-байтовой границе. Выравнивание элементов данных WMI осуществляется по тем же принципам, что и опция /Zp8 в компиляторе Microsoft C.

Модуль записи драйверов не обязательно должен определять элементы данных в блоке, отличном от обязательных элементов InstanceName и Active. Например, пустой блок событий может служить уведомлением о том, что произошло событие без дополнительных данных. Или блок данных может просто перечислить имена экземпляров в ответ на запрос IRP_MN_QUERY_ALL_DATA .

В следующей таблице перечислены типы данных MOF, которые можно использовать для определения элементов в блоке данных или события WMI. Дополнительные сведения о типах данных MOF см. в пакете SDK для Microsoft Windows.

Тип данных Формат данных Выравнивание (в байтах)

string

USHORT, указывающий длину строки в байтах, за которой следует строковые данные Юникода. Строковые данные могут включать в себя завершающий 0, за которым следует заполнение. Если да, длина строки должна включать завершающий 0 и дополнение. Драйверы могут использовать квалификатор MaxLen , чтобы указать максимальную длину в символах строки. Драйверы, указывающие максимальную длину строки, могут использовать буфер фиксированного размера для хранения строки. Если строка строго меньше размера буфера, драйвер может заполнить остальную часть строки нулями.

2

булевое значение

Однобайтовое значение, в котором 0 равно FALSE, а любое ненулевое значение — TRUE.

1

sint8

8-разрядное целое число со знаком

1

УИНТ8

8-битное целое число без знака

1

sint16

16-разрядное целое число со знаком

2

uint16

16-разрядное целое число без знака

2

sint32

32-разрядное целое число со знаком

4

uint32

32-разрядное целое число без знака

4

sint64

64-разрядное целое число со знаком

8

uint64

Целое число без знака 64-битное

8

datetime

Строка Юникода с фиксированной длиной 25 символов, указывающая абсолютный интервал даты или времени. Значение datetime имеет следующий формат:

yyyymmddhhmmss.mmmmmmsutc

где:

Гггг является 4-разрядным годом

мм — 2-значный месяц

dd — это 2-значный день месяца

hh — это час в соответствии с 24-часовым часами

мм — минута

ss — это секунды

mmmm — это число микросекунд

s — знак плюса (+) или знак минуса (-), указывающий, является ли utc положительным или отрицательным смещением от универсальных координат времени; или двоеточие (:), указывающее, что значение даты и времени является интервалом.

UTC — это смещение в минутах от универсальных координат времени. Если значение utc равно нулю (000), значение даты и времени — интервал.

Значения должны заполняться нулями. Поля, которые не являются значительными, можно заполнить звездочками (*).

2