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 提供了几种不同的方法来创建命名空间:
相关主题