首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

檔案系統驅動程式開發基礎(四):WMI 管理規範深度解析

     編輯:關於C++

WMI 簡介

WBEM 與 CIM 架構

Web-Based Enterprise Management (WBEM) 為解決企業總擁有成本 (TCO) 快速增長而生,建立在 Common Information Model (CIM) 之上。CIM 定義受管資源模型,採用 Managed Object Format (MOF) 表達,包含核心模型、通用模型與擴展模型三層:

  • 核心模型:所有管理域通用的基本類別、關聯與屬性。
  • 通用模型:特定領域(系統、應用、裝置、使用者、網路)的通用模型。
  • 擴展模型:針對特定技術環境(如 Windows、UNIX)的延伸。

Windows Management Instrumentation (WMI)

微軟實作的 WBEM 相容技術,支援 CIM 2.0/2.5,為 Windows 管理服務核心組件,特性包括:

  • 豐富一致的 Windows 作業/配置/狀態模型
  • COM API 統一存取管理資訊
  • 與其他管理服務互操作
  • 可擴展架構(提供者模組)
  • 強大事件架構
  • 查詢語言 WQL
  • 可腳本存取 API (VBScript/WSH)

WMI 架構與資料流

消費者與提供者模型

資料與事件分為消費者與提供者。資料區塊為抽象類別實例,擁有資料成員與方法。資料內容由提供者與使用目的決定,驅動程式傳出資料通常為效能統計,消費者可能為效能監視程式。

類別結構:主類別、基類別與 Amendment

  • 主類別:包含所有屬性集與限定詞。
  • 基類別:主類別子集,含所有屬性與部分限定詞,無本地化限定詞。
  • Amendment 類別:同名抽象類別,僅含本地化限定詞屬性子集,位於基類別命名空間下的子命名空間(如 ROOT\CIMV2\MS_409),支援多語言同時存在。

MOF 與 WQL 語言

MOF 基礎

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 類別用於本地化
DynamicWMI 特定標示類別實例動態建立
ProviderWMI 特定指定動態提供者名稱
WmiDataIdWDM屬性在 WNODE 中的索引,起始值為 1

WQL 查詢語言

WQL 為 ANSI-SQL 簡化版,用於查詢命名空間下的類別,如 select * from wmi42。

WMI 與驅動程式整合

WDM 驅動程式作為提供者

驅動程式透過 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 與使用者模式應用

WMI 透過 COM 介面提供服務。使用者程式需初始化 COM、設定安全性、開啟命名空間(如 root\wmi)、設定介面權限,再查詢類別屬性。智慧型指標與 ATL 簡化 COM 參考計數管理。

IClientSecurity 介面與安全性

控制每個介面 Proxy 的安全設定,提供 QueryBlanket、SetBlanket、CopyProxy 方法。每個物件擁有獨立的 Proxy Manager 自動實作此介面,用於檢查或修改 Out-of-process 物件連線的驗證/加密等級。

結語

WMI 為系統管理提供強大標準化框架,驅動開發者掌握其架構、MOF 定義與提供者實作,可建立整合度高、可擴展的管理解決方案。本篇為選讀內容,建議配合實作範例深入理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved