ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:30.45KB ,
资源ID:2141669      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2141669.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(五 CIM储存库和CIM类2.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

五 CIM储存库和CIM类2.docx

1、五 CIM储存库和CIM类2五、 CIM储存库和CIM类(2) 在本节的第(1)部分我们介绍了CIM储存库中的命名空间,并给出了如何获得CIM所有命名空间的VB代码(例程9),同时我们还指出CMI储存库的顶层是命名空间,在命名空间的下一层就是CIM类,接下来我们就介绍CIM类。CIM类的分类 如前面图1中所示,在CIM储存库中(CIM命名空间下)有3种通用的类:系统类、核心和公共类、扩展类,下面我们看一下这3种类是如何区分的 1)系统类 系统类是支持内部 WMI 配置和操作(例如,命名空间配置、命名空间安全性、提供程序注册以及事件订阅和通知)的类。浏览 CIM 时,您可以通过前缀在每个系统类名

2、前的两条下划线轻易地识别出系统类。例如,图 1 中展示的 _SystemClass、_Provider 和 _Win32Provider 类都是系统类。在上面例程8、9中调用的 _NAMESPACE 类是另一个系统类的示例。 我们来看一个系统类的例子,_Win32Provider 系统类定义存储在 CIM 中的提供程序注册信息。CIMOM(WMI 服务)使用存储在 CIM 中的提供程序注册信息,将动态托管资源的请求映射到相应的提供程序。就象例程8中使用 _NAMESPACE 系统类进行的演示,我们可以使用相同的 WMI 编程技术来检索并显示所有在 rootcimv2 命名空间中注册的 _Win

3、32Provider 实例,在代码窗口添加1个List1控件,代码如下(例程10):Option ExplicitDim objSWbemServices As SWbemServicesDim objSWbemObjectSet As SWbemObjectSetDim objSWbemObject As SWbemObjectPrivate Sub Form_Load() Set objSWbemServices = GetObject(winmgmts:.rootcimv2) Set objSWbemObjectSet = objSWbemServices.InstancesOf(_Wi

4、n32Provider) For Each objSWbemObject In objSWbemObjectSet List1.AddItem objSWbemObject.Name NextEnd Sub 除非您在写一本关于 WMI 的书,否则您不太可能会在 WMI 应用程序中用到系统类。有一个例外是 WMI 监视程序,即使用WMI事件方式(WMI事件就是一个 WMI 托管资源的实时通知),我们会在后面的章节中讨论 WMI 事件。 2)核心和公共类 核心和公共类扮演了两个角色。首先,也是最重要的,它们表现抽象类 系统和应用程序软件开发人员(例如 Microsoft 的开发人员)从这些抽象类派

5、生和创建特定技术的扩展类。其次,它们定义了特殊管理区域所共有的,但是不受限于特殊的技术或实现的资源。Distributed Management Task Force (DMTF) 定义并维护这组可以通过 CIM_ 前缀来识别的核心和公共类。图 1 中四个以 CIM_ 开头的类是核心和公共类(这里要注意不要混淆CIM类和CIM_ 前缀来识别的核心和公共类,CIM类包括3种通用的类:系统类、核心和公共类、扩展类,而CIM_ 前缀的类为“核心和公共类”的标识)。 在 rootcimv2 命名空间中定义的大约 275 个核心和公共类中,除了几个例外其余全部都是抽象类。这意味着什么呢?这意味着我们将极

6、少在 WMI 脚本中使用核心和公共类(以 CIM_ 为前缀的类)。为什么?因为您不能检索抽象类的实例,抽象类只能用作新类的基础。因为核心和公共类中的 271 个都是抽象的,所以它们主要被软件开发人员用来创建特定技术扩展类。 那么,例外是什么呢?275 个核心和公共类中的 4 个不是抽象类。它们是使用 Win32 提供程序 (cimwin32.dll) 来检索托管资源实例的动态类。请记录下来,这 4 个动态类是 CIM_DataFile、CIM_DirectoryContainsFile、CIM_ProcessExecutable 和 CIM_VideoControllerResolution。

7、 3)扩展类 扩展类是由系统和应用程序软件开发人员创建的特定技术类。图 1 中展示的Win32_BaseService、Win32_Service、Win32_SystemServices 和 Win32_ComputerSystem 类是 Microsoft 扩展类。在 rootcimv2 命名空间中的 Microsoft 扩展类可以通过 Win32_ 前缀来识别。虽然这么说,但不是所有的 Microsoft 扩展类名都以 Win32_ 开始,例如,在 rootDEFAULT 命名空间中定义的 StdRegProv 类不是以 Win32_ 为前缀的,而事实上 StdRegProv 类是用于注

8、册表管理任务的 Microsoft 扩展类。在您问之前,我们要先说:不,我们不知道为什么 StdRegProv 类在 rootDEFAULT 命名空间而非 rootcimv2 定义。 微软在一篇介绍WMI的文章中(针对基于测试版 Windows Server 2003)提供的类统计数据,在 rootcimv2 命名空间中定义了大约 463 个 Win32 扩展类。在 463 个 Win32 类中,68 个是抽象类而其余 395 个是动态类。这对您来说意味着什么呢?这意味着扩展类是您将要在 WMI 脚本中使用的主要的类类别。而对不同的Windows 版本、WMI 版本以及安装的软件,您的数字会有

9、所不同。CIM类的类型 此时应该明显的看出:类是 CIM 储存库的基本构造块。WMI 配置信息和 WMI 托管资源由一个或更多类进行定义。CIM 类是按等级组织起来的,在这种组织结构中子类从父类继承属性、方法和限定符(目前不必过多考虑属性、方法和限定符,我们将马上在下面进行讨论)。例如,Win32_Service 动态类是从 Win32_BaseService 抽象类继承的;而后者是从 CIM_Service 抽象类继承而来的;CIM_Service 抽象类则是从 CIM_LogicalElement 抽象类继承的;而 CIM_LogicalElement 抽象类又是从 CIM_Managed

10、SystemElement 抽象类继承而来的(如图 1 所示)。是托管资源的类层级中的类的总和最终定义了托管资源。 如前面提到的,有 3 个主要的类类型:抽象、静态和动态。 1)抽象类 抽象类是用于定义新类的模版。CIM 抽象类是作为其他抽象、静态和动态类的基类。每个,嗯,差不多是每个 WMI 托管资源类的定义都是从一个或更多抽象类构建(或派生)的。 您可以通过检查类的 Abstract 限定符(关于限定符在下面马上就会介绍)来识别抽象类。抽象类必须定义 Abstract 限定符并将该 Abstract 限定符的值设置为 true。本文结尾的补充清单 A 示范如何使用 WMI 脚本对象库来列出

11、所有在 rootcimv2 命名空间中定义的抽象类。 抽象类类型最常用于核心和公共类的定义。抽象类极少在 WMI 脚本中使用,这是因为您不能检索抽象类的实例。 2)静态类 静态类定义物理存储在 CIM 储存库中的数据。静态类拥有与动态类一样的实例,但是静态类的实例存储在 CIM 储存库中。同样,静态类实例是直接从 CIM 中检索的。它们不使用提供程序。 我们可以通过检查类的限定符来识别静态类。但是,不同于通过含有指定的限定符来识别的抽象和动态类类型,静态类是通过不含有 Abstract 和 Dynamic 限定符进行识别的。 静态类类型最常用于系统类的定义。静态类极少在 WMI 脚本中使用。

12、3)动态类 动态类是为从提供程序动态检索的 WMI 托管资源建模的类。 我们可以通过检查类的 Dynamic 限定符来识别动态类。动态类必须定义 Dynamic 限定符并将 Dynamic 限定符的值设置为 true。本节后所附例程示范如何使用 WMI 脚本库来列出在 rootcimv2 命名空间中定义的所有动态类。 动态类类型最常用于扩展类的定义。动态类是在 WMI 脚本中使用的最常见的类类型。 4)关联类 第四种类类型称作关联类,也是受支持的。关联类是描述两个类或托管资源之间关系的抽象、静态或动态类。图 1 所示的 Win32_SystemServices 类是一个动态关联类的示例,它描述

13、了计算机与运行在其上的服务之间的关系。 我们可以通过检查类的 Association 限定符来识别关联类。抽象、静态或动态关联类必须定义 Association 限定符并将 Association 限定符的值设置为 true。列出CIM类 现在我们说可以通过编写一个VB程序来检索在一个命名空间中定义的所有类可能不会感觉意外了,下面的例程11就可以罗列出所有在 rootcimv2 命名空间中定义的类。但是,与前面所有使用 SWbemServices对象的InstancesOf 方法不同,例程11使用一个不同的方法:SubclassesOf,它也是由 WMI 脚本对象库的 SWbemService

14、s 对象提供的。 正如该方法的名称所暗示的,SubclassesOf 返回一个指定父类或命名空间(当没有提供父类的时候)的所有子类。如 InstancesOf,SubclassesOf 返回 SWbemObjectSet 集合中的所有子类,这里该集合中的每个项目都是一个表示单一类的 SWbemObject。 例程11中另一个重要的不同是在 For Each 循环体中的 objSWbemObject.Path_.Path 属性。让我们查看一下 For Each 循环来了解这究竟是什么。For Each 循环正在枚举由 SWbemServices的SubclassesOf 方法返回的 SWbemO

15、bjectSet (colClasses) 集合中的每个 SWbemObject (objClass),每个 SWbemObject 表示 rootcimv2 命名空间中的一个离散类。代码如下(例程11):Option ExplicitDim objSWbemServices As SWbemServicesDim objSWbemObjectSet As SWbemObjectSetDim objSWbemObject As SWbemObjectPrivate Sub Form_Load() Set objSWbemServices = GetObject(winmgmts:.rootcimv2) Set objSWbemObjectSet = objSWbemServices.SubclassesOf() For Each objSWbemObject In objSWbemObjectSet List1.AddItem objSWbemObject.Path_.Path NextEnd Sub 请注意这个例程有可能产生混淆的部分

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

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