驱动程序定义的 WMI 数据项
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。
数据类型 | 数据格式 | 对齐 (字节) |
---|---|---|
string |
一个 USHORT,指定字符串长度(以字节为单位),后跟 Unicode 字符串数据。 字符串数据可以选择包含终止 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 个字符的 Unicode 字符串,用于指定绝对日期或时间间隔。 datetime 值具有以下格式: yyyymmddhmmss.mmmmmmsutc 其中: yyyy 是 4 位数的年份 mm 为 2 位数的月份 dd 是当月的 2 位日期 hh 是 24 小时制的小时 mm 为分钟 ss 是秒 mmmmmm 是微秒数 s 是加号 (+) 或减号 () ,指示 utc 是与世界时坐标的正偏移量还是负偏移量;或冒号 (:) ,指示 datetime 值是一个间隔。 utc 是与世界时坐标的偏移量(以分钟为单位)。 如果 utc 为零 (000) ,则 datetime 值为间隔。 值必须是零填充的。 不重要的字段可以使用星号 (*) 填充。 |
2 |