ACPI WMI 接口

ACPI WMI 接口是 Microsoft 对 ACPI 规范的专有扩展,它允许硬件供应商在其 ACPI 固件中嵌入 WMI (Windows Management Instrumentation) 对象。在 ACPI WMI 上实现的典型功能是现代笔记本电脑上的热键事件和 BIOS 选项的配置。

PNP0C14 ACPI 设备

WMI 对象的发现是通过定义 PNP ID 为 PNP0C14 的 ACPI 设备来处理的。这些设备将包含一组用于映射和执行 WMI 方法和/或查询的 ACPI 缓冲区和方法。如果存在多个此类设备,则每个设备都必须具有唯一的 ACPI UID。

_WDG 缓冲区

_WDG 缓冲区用于发现 WMI 对象,并且必须是静态的。它的内部结构由大小为 20 字节的数据块组成,其中包含以下数据

偏移量

大小(以字节为单位)

内容

0x00

16

128 位 Variant 2 对象 GUID。

0x10

2

2 个字符的方法 ID 或单个字节的通知 ID。

0x12

1

对象实例计数。

0x13

1

对象标志。

WMI 对象标志控制是否使用方法或通知 ID

  • 0x1:数据块的使用是昂贵的,必须显式启用/禁用。

  • 0x2:数据块包含 WMI 方法。

  • 0x4:数据块包含 ASCIZ 字符串。

  • 0x8:数据块描述 WMI 事件,使用通知 ID 而不是方法 ID。

每个 WMI 对象 GUID 可以在系统中多次出现。方法/通知 ID 用于构造用于与 WMI 对象交互的 ACPI 方法名称。

WQxx ACPI 方法

如果数据块不包含 WMI 方法,则可以通过此必需的 ACPI 方法检索其内容。ACPI 方法名称的最后两个字符是要查询的数据块的方法 ID。它们的单个参数是一个整数,描述应查询的实例。如果数据块仅包含单个实例,则可以省略此参数。

WSxx ACPI 方法

类似于 WQxx ACPI 方法,不同之处在于它是可选的,并且以附加缓冲区作为其第二个参数。实例参数也不能省略。

WMxx ACPI 方法

用于执行与数据块关联的 WMI 方法。ACPI 方法名称的最后两个字符是包含 WMI 方法的数据块的方法 ID。它们的第一个参数是一个整数,描述应执行其方法的实例。第二个参数是一个整数,描述要执行的 WMI 方法 ID,第三个参数是一个包含 WMI 方法参数的缓冲区。如果数据块被标记为包含 ASCIZ 字符串,则此缓冲区应包含 ASCIZ 字符串。ACPI 方法将返回已执行的 WMI 方法的结果。

WExx ACPI 方法

用于可选地启用/禁用 WMI 事件,ACPI 方法的最后两个字符是描述 WMI 事件的数据块的通知 ID,作为十六进制值。它们的第一个参数是一个整数,如果应禁用 WMI 事件,则值为 0,其他值将启用 WMI 事件。

WCxx ACPI 方法

类似于 WExx ACPI 方法,不同之处在于它控制数据收集而不是事件,因此 ACPI 方法名称的最后两个字符是要启用/禁用其数据块的方法 ID。

_WED ACPI 方法

用于检索其他 WMI 事件数据,其单个参数是一个整数,其中包含事件的通知 ID。每次收到 ACPI 通知时都应评估此方法,因为某些 ACPI 实现使用队列来存储 WMI 事件数据项。在收到几个 WMI 事件而没有检索关联的 WMI 事件数据后,此队列将溢出。