驱动程序定义的 WMI 数据项

本文详细介绍了WMI(Windows Management Instrumentation)数据或事件块中数据项的定义,包括基本数据类型、嵌入类以及它们的数组形式。驱动程序在发送数据块时,需要按照特定的对齐规则进行,例如布尔值和uint8对齐于1字节边界,sint16和uint16对齐于2字节边界等。此外,还列举了MOF数据类型及其格式和对齐要求,帮助理解如何定义和处理WMI数据项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

表 1
数据类型数据格式对齐 (字节数)

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 值为间隔。

值必须为零填充。 不重要的字段可以使用星号 (*) 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值