【WMI】WMI For C++/COM基礎知識

源地址:http://blog.csdn.net/xscarlet/article/details/1752040

知識背景
        WBEM——Web Based Enterprise Management是一種行業規範,建立了在企業網絡中訪問和共享管理信息的標準。
        WMI——Windows Management Instrumentation是WBEM的Windows實現。通過WMI,我們可以獲取關於硬件/軟件的數據,也可以提供關於硬件或軟件服務的數據給WMI。
        CIM——Common Information Model(公共信息模型)。在WMI架構中,CIM對象部件是結構的中心部件,控制着信息的流程。CIM把管理區域分爲物理區域和邏輯區域,他們分別對應管理環境的物理和邏輯元素。而邏輯域又可進一步分爲系統域、設備域、應用程序域和網絡域。

 
WMI整體架構
        可以在MSDN上找到WMI的架構圖,雖然說MSDN提供的架構圖很詳細,但是也很複雜,初學者學習起來可能會暈暈的,可以做如下的簡化:


        管理應用程序是任何一種語言編寫的程序,如腳本語言、C++、C#等。
        WMI核心是基於CIM的對象管理器,用於處理管理數據和管理應用程序的靜態或動態的資源。
        WMI庫是用於靜態管理數據的CIM中央儲備庫。類、實例和屬性都在這個庫中保存,是對象定義的數據庫。
        提供程序是一些COM對象,他們直接與被管理的部件(如Win32系統、註冊表、目錄服務等)進行交互。他們的信息是動態生成的。這些信息包含了來自管理應用程序請求的響應或被管理環境中的變更通知。是WMI和操作系統及其組件的中介。
        被管理對象是被管理環境中的邏輯和物理對象。如硬盤,光驅,進程等。

獲取數據流程

        提供程序生成的數據可以存放在CIM儲備庫(靜態)或者對來自CIM對象管理器的請求作出相應時,動態傳遞。實際中採取的機制,是根據數據變更的頻率來決定的。CIM儲備庫的更新影響這系統的性能。因此,如果提供程序監控的被管理部件的狀態經常變化,數據管理就傾向於動態(如筆記本的Monitor切換);如果數據是比較靜態的(如BIOS版本),到儲備庫就會終止。這決定了管理應用程序、CIM對象管理器、CIM儲備庫和提供程序之間的信息流程。
        數據的獲取一般包括如下步驟:
        1)管理應用程序發送請求給CIM對象管理器。
        2)CIM對象管理器確定請求數據是靜態的還是動態的。
        3)如果數據是靜態的,那麼CIM對象管理器就直接從儲備庫中獲取數據;如果對象是動態的,那麼CIM根據提供程序的註冊信息把請求引向恰當的提供程序。
        4)提供程序提取數據後把它發回到CIM對象管理器,然後CIM對象管理器把這些數據發送到請求數據的應用程序中。

WMI命名空間
        CIM是以面向對象原理爲基礎的,它的類都是抽象的,因爲他們要在任何環境中表示管理對象的一般模型。CIM規定提供了這樣的模型——CIM Schema。Schema是具有各種特徵的組織結構,在CIM的條件下,這種結構就是類的層次結構以及他們的方法、屬性等。
        WMI作爲WBEM的Windows實現,也反應了CIM Schema,他的很多類是從CIM派生而來的,WMI Schema也包含自己特有的類,而且這些類可以用戶擴展。
        爲了方便操作,WMI引入了名字空間的概念,用於對相同環境中存在的類進行分組。此外,名字空間也用於相關的安全限制(關於安全限制待調查)。和類相似,名字空間也構成了一個層次結構,類似與文件系統中的層次結構。
        root——作爲所有其他名字空間的頂層空間,他只包含了WMI的系統類,這些類與WMI有關。
        root/Default——與Windows註冊表操縱相關的主機類。
        root/Security——用於與Windows安全相關的類。
        root/CIMV2——包含從CIM Schema派生的類,他們代表着我們最常工作的Win32環境。
        root/WMI——包含了Windows 硬件驅動信息的類,其中包含了一些我們可能用到的關於電源、顯示器等信息的類。

WMI標準提供程序

        微軟在WMI核心部件和微軟WMI軟件開發工具中包括了很多提供程序。
        我們最常用的是Win32提供程序(核心WMI),他用於處理Win32系統特徵。CIM存儲庫把這些信息存儲爲以“Win32_”爲前綴的類中,他包含在root/CIMV2名字空間中。例如,Win32_BIOS、Win32_Service、Win32_Processor等等。
        另一個可能用到的是註冊表提供程序,他可以獲取或修改註冊表數據。當註冊表中發生變更時,他可設置事件通知。註冊表提供程序與root/default名字空間的StdRegProv類交互,這些類中包含了很多方法以查找和修改註冊表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章