在 WMI 中建立階層

WMI 命名空間 是一種程式設計物件,可定義一組類別和實例的範圍。 WMI 提供者類別必須在命名空間內定義。

命名空間描述不同的受控環境,例如 SMS 環境。 由於架構的類別和實例會定義 Managed 環境的元件,因此每個新的架構都需要新的命名空間。 例如,root\cimv2 命名空間包含 Win32 架構中定義的類別和實例,以及從中繼承 Win32 架構的父 Common Information Model (CIM) 類別。 CIM 類別是由分散式管理工作組 (DMTF) 所定義。

注意

若要確保如果 WMI 發生失敗並重新啟動,則 Managed 物件的所有 WMI 類別定義都會還原至WMI 存放庫,請使用Managed 物件格式 (MOF) 檔案中的#pragma自動復原預處理器指令。

 

WMI 會將命名空間定義為 __Namespace 系統類別的實例,或任何衍生自 __Namespace 的類別。 __Namespace系統類別具有稱為Name的單一屬性,在父命名空間的範圍內必須是唯一的。 Name屬性也必須包含以字母開頭的字串。 字串中的所有其他字元可以是字母、數位或底線。 所有字元不區分大小寫。

除了判斷子命名空間的唯一名稱之外,父 WMI 命名空間還可以保護類別的靜態實例,避免其他提供者意外修改。 例如,您可能會發現將新命名空間巢狀于另一個提供者的現有命名空間底下。 不過,原始提供者可能會嘗試更新所有類別實例,以符合新的架構。 如此一來,原始提供者可能會刪除命名空間中的所有子系。 雖然這可能是目標命名空間的適當動作,但它可能會影響子命名空間中不相關的類別實例 (也就是您自己的提供者類別) 。

因此,通常建議您建立命名空間,並將其註冊為不同于您不直接控制的命名空間。 如果您的類別只衍生自一般 CIM 類別或其他來自貴公司的類別,則尤其如此。 您的命名空間可以位於 命名空間底下,如下所示:

Root/myCompany/myProduct

相反地,如果您的新類別衍生自另一個提供者的類別,您可能需要將類別儲存在該提供者的子命名空間中。 請注意,這會讓您的新類別遭到原始提供者意外刪除。

WMI 提供數種不同的方法來建立命名空間:

(MOF) 類別設計 Managed 物件格式