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 事件資料,此佇列將會溢位。