四、了解WMI的体系结构_第1页
四、了解WMI的体系结构_第2页
四、了解WMI的体系结构_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四、了解WMI的体系结构上一讲我们介绍了用Moniker名字法建立WMI服务连接的方法,在这个方法中我们讲了Moniker名字法的连接字符串由5部分组成:前缀:"winmgmts:";安全设置:"(......}!";计算机名字:"\\ComputerName\";CIM命名空间:"root\cimv2";WMI类名:":WMIClassesName"。因为时间原因,没有举出相应的例子,本节内容比较少,又比较枯燥,所以我们举两个例子说明一下Moniker名字法的连接字符串使用方法。首先我们来看一个关机的例程(本论坛中已经有很多帖子讨论过这个问题,一般采用API方法和命令方法,这里给出1个WMI方法),与上面的例程一样,首先建立一个新工程具有Form1窗体,在菜单中的【工程】一【引用】下,添加'MicrosoftWMIScriptingV1.1Library",然后在代码窗口添加如下代码(例程4):OptionExplicitDimobjSWbemServicesAsSWbemServicesDimobjSWbemObjectSetAsSWbemObjectSetDimobjSWbemObjectAsSWbemObjectPrivateConstWMI_LOGOFF=0&'退出(注销)PrivateConstWMI_SHUTDOWN=1&'关机PrivateConstWMI_REBOOT=2&'重启动PrivateConstWMI_FORCE=4&'强制退出,即不通知现在活动应用程序让其先自我关闭PrivateConstWMI_POWEROFF=8&'关闭电源'DimstrComputerAsString,strNameSpaceAsString,strClassAsStringPrivateSubForm_Load()SetobjSWbemServices=GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!")SetobjSWbemObjectSet=objSWbemServices.ExecQuery("Select*fromWin32_OperatingSystem")ForEachobjSWbemObjectInobjSWbemObjectSetobjSWbemObject.Win32ShutdownWMI_POWEROFF,0&'关闭电源NextEndSub例程4通过WMI类Win32_OperatingSystem的Win32Shutdown方法关闭计算机,我们可以看到Moniker名字法的连接字符串只包含了2个部分:前缀:"winmgmts:";安全设置:"{impersonationLevel=impersonate,(Shutdown)}!",即身份模拟水平(impersonationLevel)为impersonate(=3),特权的取值为Shutdown(=18)。省略了:计算机名字、CIM命名空间,也没有直接建立WMI类。实际上"winmgmts:{impersonationLevel=impersonate,(Shutdown)}!"与"winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\.\root\cimv2"是完全一样的(当然前提是CIM缺省命名空间为root\cimv2)。对这个程序稍加修改,还可以实现退出(注销)、关机(不关闭电源)、重启动等,如果具有远程计算机的管理员权限,还可以关闭远程计算机。下面我们再举1个例子。我们看到前面的例程2(枚举系统所有服务)中是利用WMI类Win32_Service获得系统所有服务对象实例,并且通过读取DisplayName、State、StartMode、PathName和StartName将服务名称、服务的状态、服务的启动方式、服务程序的路径和服务的登录身份显示到列表中,那Win32_Service究竟有那些属性呢?当然我们可以通过微软的资料查阅出每个WMI类的各项属性,其实我们也可以通过编程列出各个WMI类的各项属性,这个例子就是用来列出Win32_Service的所有属性的名字。与上面的例程一样,首先建立一个新工程具有Forml窗体,在菜单中的【工程】一【引用】下,添加“MicrosoftWMIScriptingV1.1Library”,然后在代码窗口添加1个Listl控件,代码如下(例程5):OptionExplicitDimobjSWbemObjectAsSWbemObjectDimobjSWbemPropertyAsSWbemPropertyDimstrComputerAsString,strNameSpaceAsString,strClassAsStringPrivateSubForm_Load()strComputer="."'计算机名,.为本机strNameSpace="root\cimv2"'指定命名空间为root\cimv2strClass="Win32_Service"'指定类为Win32_ServiceMe.Caption=strClass&"类的属性名称"SetobjSWbemObject=GetObject("winmgmts:\\"&strComputer&"\"&strNameSpace&":"&strClass)'建立指定计算机、命名空间、指定类的引用ForEachobjSWbemPropertyInobjSWbemObject.Properties_List1.AddItemobjSWbemProperty.Name'将Win32_Service的属性名称添加到List1NextSetobjSWbemObject=NothingSetobjSWbemProperty=NothingEndSub例程5运行后将列出Win32_Service的所有属性的名字,利用这个例程只要用其他的WMI类(例如前面已经提到过的Win32_Process或Win32_OperatingSystem)替换Win32_Service,就可以得到对应的WMI类的所有属性的名字。这里我们还是来看一下Moniker名字法的连接字符串包含了4个部分,与前面不同的是我们这个例程中出现了第5部分:类名":Win32_Service",因此GetObject返回一个Win32_Service类对象,然后我们枚举这个对象的Properties—属性(实际上是一个集合,包含了SWbemProperty对象)中的objSWbemProperty对象的Name属性(这是1个字符串)。这句话是在有些拗口,意思可能也不容易一下子理解,不过我们后面还会进一步讲述这个问题。例子就讲这些了,接下去我们还是回到我们本节的主题,首先我们看看WMI的体系结构。WMI体系结构由三个主层组成,如下图所示:向讪储存库%E^slfimRoot%\svstefin3^wbem^R&positary\FS\objects,dataWMI向讪储存库%E^slfimRoot%\svstefin3^wbem^R&positary\FS\objects,dataWMI基础基构氏管资濯的本风鹿用程甲娠羿搓D择管登源[应用程序,设备系统)ICIM对寒管理爵4CIM0M}WMI眼有%Sy5temRoot%\sya-tenn3BwbeEWnrngmt睥序WMI脚本库^SysterrRpgt用脾对32\wban^ufaBnndlGp.dll州附提供起序^SyeteiriReia明卿glaringK^bemft'.dllWMI使用者WMI剧木・托管资源•WMI基础结构・使用者托管资源托管资源是任意逻辑或物理组件,通过使用WMI进行公开和管理。可以使用WMI管理的Windows资源包括:计算机系统、磁盘、外围设备、事件日志、文件、文件夹、文件系统、网络组件、操作系统子系统、性能计数器、打印机、进程、注册表设置、安全性、服务、共享、SAM用户和组、ActiveDirectory、Windows安装程序、Windows驱动程序模式(WDM)设备驱动程序,以及SNMP管理信息基(MIB)数据等。WMI托管资源通过一个提供程序与WMI通讯。WMI基础结构中间层是WMI基础结构。WMI由四个主要组件构成:公共信息模型对象管理器(CommonInformationModelObjectManager,CIMOM)、公共信息模型(CommonInformationModel,CIM)储存库,以及提供程序。这三个WMI组件共同提供通过其定义、公开、访问和检索配置和管理数据的基础结构,为了叙述和理解方便,我们在本文中就将这三个组件通称为CIM储存库。第四个组件是WMI脚本对象库,就是我们前面几个例程都必须引用的“MicrosoftWMIScriptingV1.1Library”对象库,就我们来说一就是使用者,首先就是通过WMI脚本库与CIM储存库打交道去管理系统的各种托管资源。因此我们重点关注的应该是CIM储存库和WMI脚本对象库。CIM储存库WMI的基本思想是一可以用一个架构统一表示来自不同源的配置和管理信息°CIM就是这个架构,还调用了模型化托管环境和定义每个由WMI公开的数据块的对象储存库或类存储。该架构基于DMTF公共信息模型标准。CIM由类组成。类是一个WMI托管资源的一个模型。CIM类通常表示动态资源,就是说托管资源的实例并不存储在CIM中,而是通过基于使用者请求的提供程序动态检索。其原因很简单,大多数WMI托管资源的操作状态更改很频繁,因而必须按需读取以确保检索的是最新的信息,就象我们例程1中的进程和例程2中的服务随时都在变动的。注在CIM的上下文中,储存库这一术语有些被误解。尽管CIM是一个储存库,而且能够存储静态数据,但其主要角色是存储托管资源的模型。CIM类是分级组织的,每一级的子类从父类继承。DMTF维护一组核心和公共基类,系统和应用程序软件开发人员(如Microsoft的那些)从这些类派生和创建系统(或应用程序)特定的扩展类。类被分组到命名空间中,命名空间是表示一个特定的管理区域的类逻辑组。例如,命名空间root\cimv2包括大部分表示通常与计算机和操作系统相关联的资源的类。在前面的例程中使用的类(Win32_Process、Win32_Service和为Win32_ShortcutFile)驻留在命名空间root\cimv2,它们只是在CIM中定义的数百个类中的三个。CIM类由属性和方法构成。属性描述WMI托管资源的配置和状态,方法是在WMI托管资源上执行操作的可执行函数。注不要将由CIM定义的方法和属性与由WMI脚本对象库中的自动化对象提供的方法和属性相混淆。WMI脚本对象库WMI脚本对象库提供一组应用对象集,WMI脚本对象库中的这些对象为WMI基础结构提供一个一致且统一的模型。如前面所示,一旦您了解如何使用WMI脚本对象库检索一个托管资源类型,您就可以轻松

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论