ACPI WMI 介面

ACPI WMI 介面是微軟對 ACPI 規範的專有擴充套件,旨在允許硬體供應商在其 ACPI 韌體中嵌入 WMI (Windows Management Instrumentation) 物件。透過 ACPI WMI 實現的典型功能包括現代筆記型電腦上的熱鍵事件以及 BIOS 選項的配置。

PNP0C14 ACPI 裝置

WMI 物件的發現透過定義 PNP ID 為 PNP0C14 的 ACPI 裝置來處理。這些裝置將包含一組 ACPI 緩衝區和方法,用於對映和執行 WMI 方法和/或查詢。如果存在多個此類裝置,則每個裝置都必須具有唯一的 ACPI UID。

_WDG 緩衝區

_WDG 緩衝區用於發現 WMI 物件,並且必須是靜態的。其內部結構由大小為 20 位元組的資料塊組成,包含以下資料

偏移量

大小(位元組)

內容

0x00

16

128 位 Variant 2 物件 GUID。

0x10

2

2 字元方法 ID 或單位元組通知 ID。

0x12

1

物件例項計數。

0x13

1

物件標誌。

WMI 物件標誌控制是否使用方法 ID 或通知 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。

在設定資料塊之前也會呼叫這些 ACPI 方法,以匹配 Windows 驅動程式的行為。

_WED ACPI 方法

用於檢索額外的 WMI 事件資料,其單個引數是一個整數,包含事件的通知 ID。每次收到 ACPI 通知時都應評估此方法,因為某些 ACPI 實現使用佇列儲存 WMI 事件資料項。如果在收到多個 WMI 事件後未檢索到關聯的 WMI 事件資料,此佇列將會溢位。