# wmi 架構(Architecture) wmi提供一個統一的介面給其他local或remote的應用程式使用,還包含電腦系統、網路及的管理資料。 這讓做的目的是不用讓使用wmi的client applications或scripts去call大量不同的APIs。 有許多APIs不能自動的被call,或不能被遠端call。 1. 可以從WMI獲取data,我們可以撰寫script或application去accesses WMI classes。 2. 或提供data給WMI(寫一個WMI provider) # objects, consumers, and infrastructure of WMI 以下的圖說明了WMI的基本結構、WMI的providers和管理的objects。 ![](https://docs.microsoft.com/en-us/windows/win32/wmisdk/images/wmi-architecture.png) # WMI的組成部分 1. 管理objects和WMI providers: WMI provider是一個COM object (Component Object Module),這個WMI provider顯示了一個或多個managed objects 給WMI。 A managed object 是一個logical或physical enterprise component(企業物件?), 像是 hard disk drive, network adapter, database system, operating system, process, or service. 類似一個driver, 一個provider提供WMI的data從管理和WMI的handles messages到managed object。 WMI providers 由一個DLL file和一個[Managed Object Format(MOF)](https://docs.microsoft.com/en-us/windows/win32/wmisdk/gloss-m) file 一個範例的provider是一個預先安裝的registry provider,他的功用是在system registry accesses data。 The Registry provider 有一個WMI class、StdRegProv及許多methods但沒有properties。 其他preinstalled providers,像是[Win32 provider](https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-provider)通常有許多properties的classes,但是很少methods,像是[Win32_Process](https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-process) 或 [Win32_LogicalDisk](https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-logicaldisk) The Registry provider DLL file, Stdprov.dll包含的code是動態的回傳資料(藉由client script或applications). WMI的MOF和DLL files 位於 %WINDIR%\System32\Wbem。 Along with [WMI Command-Line Tool](https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-command-line-tools)像是Winmgmt.exe和Mofcomp.exe. Provider calsses 像是[Win32_LogicalDisk](https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-logicaldisk), 被定義於MOF files,然後compiled into 到 WMI repository 在系統開機時。 2. WMI 基本架構(WMI infrasturcture) WMI infrastructure是Microsoft Windows 作業系統的元件,像是大家熟知的WMI service(winmgmt)。 WMI infrastructure有兩個元件 * the WMI Core * the WMI [repository](https://docs.microsoft.com/en-us/windows/win32/wmisdk/gloss-w) The WMI repository是一個WMI [namespaces](https://docs.microsoft.com/en-us/windows/win32/wmisdk/gloss-n)的組織。 The WMI service 創一些namespaces像是 root\default, root\cimv2 和 root\subscription在系統開的時候和預先安裝預設的定義,包含Win32的classes, WMI System Classes。 WMI service 類似於在the providers和management applications 和 WMI repository之中的中介。 只有static data的objects是存放於repository(像是由provider定義的classes) 當client需要,WMI藉由provider獲取大多的動態data。 你也可以從provider中set up subscriptions去接受事件通知 3. WMI consumers WMI consumer 是一個++管理應用++或是個++script與WMI基本架構互動++ 一個management application可以發送, 枚舉data, run provider 方法, 或者subscribe 事件(藉由其他WMI的COM API或者WMI的Script API)。 只有managed object的data或可用actions(像是disk drive 或service)是由provider supplies。 ###### tags: `wmi`