WMI 数据或事件块类定义中的数据项可以是下列项之一:
基本数据类型,如字符串或无符号整数。
嵌入类。 嵌入类仅用作另一类定义中的数据项,不会作为数据块或事件块公开。
基本数据类型或嵌入式类的固定长度或可变长度数组。
将数据块发送到 WMI 时,驱动程序必须在 8 字节边界上对齐块的开头。 块中的所有后续数据项必须在数据类型的相应对齐方式上对齐。 布尔值或 uint8 应在 1 字节边界上对齐。 sint16、uint16 或字符串项应在 2 字节边界上对齐,以此类推。 应根据数组的基类型对齐数组。 字节数组应在字节边界上对齐,uint64 数组应在 8 字节边界上对齐,依此对齐。 应根据嵌入类中最大元素的自然对齐方式来对齐嵌入类,因为该自然对齐方式是由该最大元素的对齐方式定义的。 例如,如果嵌入类具有 uint64,则应在 8 字节边界上对齐该类。 WMI 数据项对齐遵循与 Microsoft C 编译器上的 /Zp8 开关相同的约定。
驱动程序编写器不一定必须定义除所需项 InstanceName 和 Active 之外的块中的数据项。 例如,空事件块可以用作事件发生的通知,而无需其他数据。 或者,数据块可能只是枚举实例名称以响应 IRP_MN_QUERY_ALL_DATA 请求。
下表列出了可用于定义 WMI 数据或事件块中的项的 MOF 数据类型。 有关 MOF 数据类型的详细信息,请参阅 Microsoft Windows SDK。
| 数据类型 | 数据格式 | 对齐方式(以字节为单位) |
|---|---|---|
字符串 |
指定字符串长度(以字节为单位)的 USHORT,后跟 Unicode 字符串数据。 字符串数据可以选择性地包含一个终结符0,紧跟着填充。 如果是,则字符串长度必须包含终止符0和填充。 驱动程序可以使用 MaxLen 限定符指定字符串的最大长度(以字符为单位)。 指定最大字符串长度的驱动程序可以使用固定大小缓冲区来保存字符串。 如果字符串严格小于缓冲区的大小,则驱动程序可以使用零填充字符串的其余部分。 |
2 |
boolean |
一个字节值,其中 0 为 FALSE,任何非零值为 TRUE |
1 |
sint8 |
8 位带符号整数 |
1 |
uint8 |
无符号 8 位整数 |
1 |
int16 |
带符号 16 位整数 |
2 |
uint16 |
无符号 16 位整数 |
2 |
sint32 |
带符号的 32 位整数 |
4 |
uint32 |
无符号 32 位整数 |
4 |
sint64 |
64 位带符号整数 |
8 |
uint64 |
无符号 64 位整数 |
8 |
日期/时间 |
指定绝对日期或时间间隔的固定长度 25 个字符的 Unicode 字符串。 日期/时间值采用以下格式: yyyymmddhhmmss.mmmmmmsutc 地点: yyyy 是 4 位年份 mm 是 2 位数的月份 dd 是月份的 2 位日期 hh 是 24 小时制的小时 mm 表示分钟 ss 是秒数 mmmmmm 是微秒数 s 是加号(+)或减号(-),指示 utc 是世界时坐标的正偏移量还是负偏移量;或冒号 (:),指示 日期/时间 值是时间间隔。 utc 是世界时坐标的偏移量(以分钟为单位)。 如果 utc 为零(000), 则日期/时间 值为间隔。 值必须进行零填充。 不重要的字段可以填充星号。 |
2 |