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


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

Элемент данных в определении класса данных 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 см. в Microsoft Windows SDK.

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

строка

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

2

boolean

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

1

sint8

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

1

uint8

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

1

sint16

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

2

uint16

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

2

sint32

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

4

uint32

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

4

sint64

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

8

uint64

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

8

datetime

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

yyyymmddhhmmss.mmmmmmsutc

где:

гггг — 4-значный год

мм — месяц из 2 цифр

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

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

мм — это минута

ss — секунды

mmmmmm — количество микросекунд.

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

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

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

2