элементы данных 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 |