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值采用以下格式: yyyymmddhhmmss.mmmmmmsutc 其中: yyyy 是 4 位数年份 mm 是 2 位数月份 dd 是一个月的 2 位数天 hh 是 24 小时制的小时 mm 是分钟 ss 为秒 mmmmmm 是微秒数 s 是 + () 或减号 (-) ,指示 utc 是相对于通用时间坐标的正偏移量还是负偏移量;或冒号 (:) ,指示 datetime 值为间隔。 utc 是相对于通用时间坐标的偏移量(以分钟表示)。 如果 utc 为零 (000) , 则 datetime 值为间隔。 值必须为零填充。 不重要的字段可以使用星号 (*) 。 |