在 WMI 中创建层次结构

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

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

注意

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

 

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

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

因此,通常建议创建命名空间并将其注册为独立于不直接控制的命名空间。 如果类仅派生自常规 CIM 类或其他公司的类,则尤其如此。 命名空间可以属于 命名空间,如下所示:

Root/myCompany/myProduct

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

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

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