Web-Based Enterprise Management (WBEM) 為解決企業總擁有成本 (TCO) 快速增長而生,建立在 Common Information Model (CIM) 之上。CIM 定義受管資源模型,採用 Managed Object Format (MOF) 表達,包含核心模型、通用模型與擴展模型三層:
微軟實作的 WBEM 相容技術,支援 CIM 2.0/2.5,為 Windows 管理服務核心組件,特性包括:
資料與事件分為消費者與提供者。資料區塊為抽象類別實例,擁有資料成員與方法。資料內容由提供者與使用目的決定,驅動程式傳出資料通常為效能統計,消費者可能為效能監視程式。
ROOT\CIMV2\MS_409),支援多語言同時存在。MOF 基於 IDL,語法類似 C++ 但更簡單。編譯器 mofcomp.exe 處理 MOF 檔案並更新 CIM 儲存庫。關鍵指令:
#pragma namespace("\\\\.\\root")
instance of __Namespace { Name = "WMI"; };
#pragma namespace("\\\\.\\root\\WMI")
Class A { [key] string aKey; };
[Association] Class B {
[key] A ref aRef;
[Key, Min(1)] C ref cRef;
[key] D ref dRef;
[key] E ref eRef;
};
常用編譯操作:語法檢查、產生語言中性/特定 MOF、編譯為二進位 BMF 資源檔。
| 限定詞 | 分類 | 說明 |
|---|---|---|
| Key | 標準 | 鍵屬性,識別實例,支援複合鍵 |
| Amended | 風格 | 基類別不使用,Amendment 類別用於本地化 |
| Dynamic | WMI 特定 | 標示類別實例動態建立 |
| Provider | WMI 特定 | 指定動態提供者名稱 |
| WmiDataId | WDM | 屬性在 WNODE 中的索引,起始值為 1 |
WQL 為 ANSI-SQL 簡化版,用於查詢命名空間下的類別,如 select * from wmi42。
驅動程式透過 MOF 定義結構描述,系統維護儲存庫。支援 WMI 需處理 IRP_MJ_SYSTEM_CONTROL,可委派 WMILIB 簡化實作。核心結構 WMILIB_CONTEXT 包含 GUID 註冊資訊與回呼函數指標:
typedef struct _WMILIB_CONTEXT {
ULONG GuidCount;
PWMIGUIDREGINFO GuidList;
PWMI_QUERY_REGINFO QueryWmiRegInfo;
PWMI_QUERY_DATABLOCK QueryWmiDataBlock;
PWMI_SET_DATABLOCK SetWmiDataBlock;
PWMI_SET_DATAITEM SetWmiDataItem;
PWMI_EXECUTE_METHOD ExecuteWmiMethod;
PWMI_FUNCTION_CONTROL WmiFunctionControl;
} WMILIB_CONTEXT;
關鍵流程:AddDevice/RemoveDevice 註冊/註銷提供者,首個 IRP_MN_REGINFO 觸發 QueryRegInfo 回傳 MOF 資源名稱。
WMI 透過 COM 介面提供服務。使用者程式需初始化 COM、設定安全性、開啟命名空間(如 root\wmi)、設定介面權限,再查詢類別屬性。智慧型指標與 ATL 簡化 COM 參考計數管理。
控制每個介面 Proxy 的安全設定,提供 QueryBlanket、SetBlanket、CopyProxy 方法。每個物件擁有獨立的 Proxy Manager 自動實作此介面,用於檢查或修改 Out-of-process 物件連線的驗證/加密等級。
WMI 為系統管理提供強大標準化框架,驅動開發者掌握其架構、MOF 定義與提供者實作,可建立整合度高、可擴展的管理解決方案。本篇為選讀內容,建議配合實作範例深入理解。