在 WMI 中创建层次结构

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

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

备注

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

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

除了确定子命名空间的唯一名称外,父 WMI 命名空间还可以保护类的静态实例不受其他提供程序的意外修改。 例如,你可能会发现在另一个提供程序的现有命名空间下嵌套新的命名空间是非常方便的。 但是,原始提供程序可能会尝试更新所有类实例,使之与新架构相匹配。 在此过程中,原始提供程序可以删除命名空间中的所有子子级。 虽然这可能是针对目标命名空间的相应操作,但它可能会影响子命名空间中不相关的类实例 (也就是说,你自己的提供程序类) 。

因此,通常建议您创建命名空间并将其注册为不直接控制的命名空间中的命名空间。 如果类仅从来自公司的一般 CIM 类或其他类派生,则更是如此。 命名空间可以位于 命名空间下,如下所示:

Root/myCompany/myProduct

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

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

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