在 WMI 中创建层次结构

WMI 命名空间是一个编程对象,用于定义一组类和实例的范围。 必须在命名空间中定义 WMI 提供程序类。

命名空间描述不同的托管环境,例如 SMS 环境。 由于架构的类和实例定义了托管环境的组件,因此每个新架构都需要一个新的命名空间。 例如,root\cimv2 命名空间包含 Win32 架构中定义的类和实例,以及父通用信息模型 (CIM) Win32 架构继承的类。 CIM 类由分布式管理任务组 (DMTF) 定义。

注意

若要确保在 WMI 发生故障并重启时将托管对象的所有 WMI 类定义还原到 WMI 存储库,请使用托管对象格式 (MOF) 文件中的 #pragma autorecover 预处理器指令。

 

WMI 将命名空间定义为 __Namespace 系统类或派生自 __Namespace 的任何类的实例。 __Namespace 系统类具有名为 Name 的单个属性,该属性在父命名空间的范围内必须是唯一的。 Name 属性还必须包含以字母开头的字符串。 字符串中的所有其他字符可以是字母、数字或下划线。 所有字符均不区分大小写。

除了确定子命名空间的唯一名称外,父 WMI 命名空间还可以保护类的静态实例免受其他提供程序的意外修改。 例如,在另一个提供程序的现有命名空间下嵌套一个新命名空间,你可能会发现这样很方便。 但是,原始提供程序可能会尝试更新所有类实例以匹配新架构。 这样做时,原始提供程序可能会删除命名空间中的所有从属子级。 虽然这个操作对于目标命名空间来说没有问题,但可能会影响子命名空间中不相关的类实例(即你自己的提供程序类)。

因此,通常建议你创建命名空间并将其作为单独的命名空间(不是由你直接控制)进行注册。 如果类完全派生自公司的常规 CIM 类或其他类,则更应如此。 命名空间可以属于 Root 命名空间,如下所示:

Root/myCompany/myProduct

相反,如果新类派生自另一个提供程序的类,则可能需要将类存储在该提供程序的子命名空间中。 请注意,这会将新的类公开,可以由原始提供程序故意删除。

WMI 提供了几种不同的方法来创建命名空间:

设计托管对象格式 (MOF) 类