五 CIM储存库和CIM类2.docx

上传人:b****2 文档编号:2141669 上传时间:2022-10-27 格式:DOCX 页数:16 大小:30.45KB
下载 相关 举报
五 CIM储存库和CIM类2.docx_第1页
第1页 / 共16页
五 CIM储存库和CIM类2.docx_第2页
第2页 / 共16页
五 CIM储存库和CIM类2.docx_第3页
第3页 / 共16页
五 CIM储存库和CIM类2.docx_第4页
第4页 / 共16页
五 CIM储存库和CIM类2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

五 CIM储存库和CIM类2.docx

《五 CIM储存库和CIM类2.docx》由会员分享,可在线阅读,更多相关《五 CIM储存库和CIM类2.docx(16页珍藏版)》请在冰豆网上搜索。

五 CIM储存库和CIM类2.docx

五CIM储存库和CIM类2

五、CIM储存库和CIM类

(2)

  在本节的第

(1)部分我们介绍了CIM储存库中的命名空间,并给出了如何获得CIM所有命名空间的VB代码(例程9),同时我们还指出CMI储存库的顶层是命名空间,在命名空间的下一层就是CIM类,接下来我们就介绍CIM类。

CIM类的分类

  如前面图1中所示,在CIM储存库中(CIM命名空间下)有3种通用的类:

系统类、核心和公共类、扩展类,下面我们看一下这3种类是如何区分的

  1)系统类

  系统类是支持内部WMI配置和操作(例如,命名空间配置、命名空间安全性、提供程序注册以及事件订阅和通知)的类。

浏览CIM时,您可以通过前缀在每个系统类名前的两条下划线轻易地识别出系统类。

例如,图1中展示的__SystemClass、__Provider和__Win32Provider类都是系统类。

在上面例程8、9中调用的__NAMESPACE类是另一个系统类的示例。

  我们来看一个系统类的例子,__Win32Provider系统类定义存储在CIM中的提供程序注册信息。

CIMOM(WMI服务)使用存储在CIM中的提供程序注册信息,将动态托管资源的请求映射到相应的提供程序。

就象例程8中使用__NAMESPACE系统类进行的演示,我们可以使用相同的WMI编程技术来检索并显示所有在root\cimv2命名空间中注册的__Win32Provider实例,在代码窗口添加1个List1控件,代码如下(例程10):

OptionExplicit

DimobjSWbemServicesAsSWbemServices

DimobjSWbemObjectSetAsSWbemObjectSet

DimobjSWbemObjectAsSWbemObject

PrivateSubForm_Load()

  SetobjSWbemServices=GetObject("winmgmts:

\\.\root\cimv2")

  SetobjSWbemObjectSet=objSWbemServices.InstancesOf("__Win32Provider")

  ForEachobjSWbemObjectInobjSWbemObjectSet

      List1.AddItemobjSWbemObject.Name

  Next

EndSub

  除非您在写一本关于WMI的书,否则您不太可能会在WMI应用程序中用到系统类。

有一个例外是WMI监视程序,即使用WMI事件方式(WMI事件就是一个WMI托管资源的实时通知),我们会在后面的章节中讨论WMI事件。

  2)核心和公共类

  核心和公共类扮演了两个角色。

首先,也是最重要的,它们表现抽象类—系统和应用程序软件开发人员(例如Microsoft的开发人员)从这些抽象类派生和创建特定技术的扩展类。

其次,它们定义了特殊管理区域所共有的,但是不受限于特殊的技术或实现的资源。

DistributedManagementTaskForce(DMTF)定义并维护这组可以通过CIM_前缀来识别的核心和公共类。

图1中四个以CIM_开头的类是核心和公共类(这里要注意不要混淆CIM类和CIM_前缀来识别的核心和公共类,CIM类包括3种通用的类:

系统类、核心和公共类、扩展类,而CIM_前缀的类为“核心和公共类”的标识)。

  在root\cimv2命名空间中定义的大约275个核心和公共类中,除了几个例外其余全部都是抽象类。

这意味着什么呢?

这意味着我们将极少在WMI脚本中使用核心和公共类(以CIM_为前缀的类)。

为什么?

因为您不能检索抽象类的实例,抽象类只能用作新类的基础。

因为核心和公共类中的271个都是抽象的,所以它们主要被软件开发人员用来创建特定技术扩展类。

  那么,例外是什么呢?

275个核心和公共类中的4个不是抽象类。

它们是使用Win32提供程序(cimwin32.dll)来检索托管资源实例的动态类。

请记录下来,这4个动态类是CIM_DataFile、CIM_DirectoryContainsFile、CIM_ProcessExecutable和CIM_VideoControllerResolution。

  3)扩展类

  扩展类是由系统和应用程序软件开发人员创建的特定技术类。

图1中展示的Win32_BaseService、Win32_Service、Win32_SystemServices和Win32_ComputerSystem类是Microsoft扩展类。

在root\cimv2命名空间中的Microsoft扩展类可以通过Win32_前缀来识别。

虽然这么说,但不是所有的Microsoft扩展类名都以Win32_开始,例如,在root\DEFAULT命名空间中定义的StdRegProv类不是以Win32_为前缀的,而事实上StdRegProv类是用于注册表管理任务的Microsoft扩展类。

在您问之前,我们要先说:

不,我们不知道为什么StdRegProv类在root\DEFAULT命名空间而非root\cimv2定义。

  微软在一篇介绍WMI的文章中(针对基于测试版WindowsServer2003)提供的类统计数据,在root\cimv2命名空间中定义了大约463个Win32扩展类。

在463个Win32类中,68个是抽象类而其余395个是动态类。

这对您来说意味着什么呢?

这意味着扩展类是您将要在WMI脚本中使用的主要的类类别。

而对不同的Windows版本、WMI版本以及安装的软件,您的数字会有所不同。

CIM类的类型

  此时应该明显的看出:

类是CIM储存库的基本构造块。

WMI配置信息和WMI托管资源由一个或更多类进行定义。

CIM类是按等级组织起来的,在这种组织结构中子类从父类继承属性、方法和限定符(目前不必过多考虑属性、方法和限定符,我们将马上在下面进行讨论)。

例如,Win32_Service动态类是从Win32_BaseService抽象类继承的;而后者是从CIM_Service抽象类继承而来的;CIM_Service抽象类则是从CIM_LogicalElement抽象类继承的;而CIM_LogicalElement抽象类又是从CIM_ManagedSystemElement抽象类继承而来的(如图1所示)。

是托管资源的类层级中的类的总和最终定义了托管资源。

  如前面提到的,有3个主要的类类型:

抽象、静态和动态。

  1)抽象类

  抽象类是用于定义新类的模版。

CIM抽象类是作为其他抽象、静态和动态类的基类。

每个,嗯,差不多是每个WMI托管资源类的定义都是从一个或更多抽象类构建(或派生)的。

  您可以通过检查类的Abstract限定符(关于限定符在下面马上就会介绍)来识别抽象类。

抽象类必须定义Abstract限定符并将该Abstract限定符的值设置为true。

本文结尾的补充清单A示范如何使用WMI脚本对象库来列出所有在root\cimv2命名空间中定义的抽象类。

  抽象类类型最常用于核心和公共类的定义。

抽象类极少在WMI脚本中使用,这是因为您不能检索抽象类的实例。

  2)静态类

  静态类定义物理存储在CIM储存库中的数据。

静态类拥有与动态类一样的实例,但是静态类的实例存储在CIM储存库中。

同样,静态类实例是直接从CIM中检索的。

它们不使用提供程序。

  我们可以通过检查类的限定符来识别静态类。

但是,不同于通过含有指定的限定符来识别的抽象和动态类类型,静态类是通过不含有Abstract和Dynamic限定符进行识别的。

  静态类类型最常用于系统类的定义。

静态类极少在WMI脚本中使用。

  3)动态类

  动态类是为从提供程序动态检索的WMI托管资源建模的类。

  我们可以通过检查类的Dynamic限定符来识别动态类。

动态类必须定义Dynamic限定符并将Dynamic限定符的值设置为true。

本节后所附例程示范如何使用WMI脚本库来列出在root\cimv2命名空间中定义的所有动态类。

  动态类类型最常用于扩展类的定义。

动态类是在WMI脚本中使用的最常见的类类型。

  4)关联类

  第四种类类型称作关联类,也是受支持的。

关联类是描述两个类或托管资源之间关系的抽象、静态或动态类。

图1所示的Win32_SystemServices类是一个动态关联类的示例,它描述了计算机与运行在其上的服务之间的关系。

  我们可以通过检查类的Association限定符来识别关联类。

抽象、静态或动态关联类必须定义Association限定符并将Association限定符的值设置为true。

列出CIM类

  现在我们说可以通过编写一个VB程序来检索在一个命名空间中定义的所有类可能不会感觉意外了,下面的例程11就可以罗列出所有在root\cimv2命名空间中定义的类。

但是,与前面所有使用SWbemServices对象的InstancesOf方法不同,例程11使用一个不同的方法:

SubclassesOf,它也是由WMI脚本对象库的SWbemServices对象提供的。

  正如该方法的名称所暗示的,SubclassesOf返回一个指定父类或命名空间(当没有提供父类的时候)的所有子类。

如InstancesOf,SubclassesOf返回SWbemObjectSet集合中的所有子类,这里该集合中的每个项目都是一个表示单一类的SWbemObject。

  例程11中另一个重要的不同是在ForEach循环体中的objSWbemObject.Path_.Path属性。

让我们查看一下ForEach循环来了解这究竟是什么。

ForEach循环正在枚举由SWbemServices的SubclassesOf方法返回的SWbemObjectSet(colClasses)集合中的每个SWbemObject(objClass),每个SWbemObject表示root\cimv2命名空间中的一个离散类。

代码如下(例程11):

OptionExplicit

DimobjSWbemServicesAsSWbemServices

DimobjSWbemObjectSetAsSWbemObjectSet

DimobjSWbemObjectAsSWbemObject

PrivateSubForm_Load()

  SetobjSWbemServices=GetObject("winmgmts:

\\.\root\cimv2")

  SetobjSWbemObjectSet=objSWbemServices.SubclassesOf()

  

  ForEachobjSWbemObjectInobjSWbemObjectSet

      List1.AddItemobjSWbemObject.Path_.Path

  Next

EndSub

  请注意这个例程有可能产生混淆的部分

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1