2.7 Windows 2000/XP的管理机制
Windows 2000/XP通常利用事件管理器报告错误信息和诊断信息。而事件查看工具蚰苁构芾碓毕晗刚莆毡镜鼗?驮冻袒?魃系氖录???S胫?嗨频氖牵?阅芷拦阑?剖沟糜τ贸绦蚝筒僮飨低匙榧?芙?阅鼙硐值耐臣剖?荽?透?阅芗嗍悠?
Performance Monitor)
Windows NT事件监视器和
性能监视器是有一定局限性的。举例来说,程序接口千差万别,这种差异无疑增加了应用程序运用事件和性能管理器收集
数据的复杂程度。而性能评估机制体现不出它们之间的细微差别,尤其是通过网络的时候,因为这些性能统计数据往往经过系统的修改,所以不能直接反映你所关心的对象的情况。Windows NT 4监视系统中最大的弱点就是它们几乎不具备可扩展性,而且日志和性能数据的收集程序也没有给用户提供交互中所必需的编程接口。应用程序必须以预先定义好的格式提供数据,而程序没有办法收到与性能评测相关的事件的提示消息,而且事件管理器所提供的事件的消息也无法让程序知道这些事件的确切类型和来源。最后,这些性能数据评估程序实际上无法通过事件管理器或是应用程序接口与事件或性能数据的提供程序进行通信。
为了消除这些局限,同时也为其他的数据源提供管理和分析的工具,Windows 2000/XP引入了一种新的机制:Windows Management Instrumentation(WMI)。WMI是基于网络的企业管理(Web-Based Enterprise Management,WBEM)标准的实现,这个标准是由分布式管理工作小组(Distributed Management TaskForce,DMTF,)所制订的。WBEM标准中包括了事务数据收集和管理的
设计,这种设计具有很强的伸缩性和扩展性,这两种特性正是管理可能由多种不同组件组成的本地机和远程机器所必需的。
2.7.1 WMI的体系结构
WMI包含4个主要的组件(如图2—16所示):管理程序、WMI基础设施、数据生产者和被管理的对象集合。管理程序处理和显示应用程序从被管理的对象获取的数据。一个简单的例子是性能评测工具使用WMI标准而不是API来收集性能相关的统计数据,而更复杂的例子是,一个基于WMI标准的企业级的管理工具可以使管理员方便地管理每台软件与硬件的配置。
开发者往往将管理应用程序的目标定位于从指定的对象获取数据。一个对象可能代表一个组件,如一个网络适配器,也可能代表一系列的组件,如一台计算机。数据生产者需要确定和输出管理应用程序所关心的对象在系统中代表什么。比如,一个网络适配器的厂商可能会将一些适配器的属性加入WMI所支持的适配器中,这样应用程序可以通过WMI根据自己的需要查询和设置适配器的状态和行为。在一些应用(如设备驱动程序)中,
微软公司提供了一个带有编程接口的数据生产者,使开发者用最少的代码设计出拥有自定义的管理对象的数据生产者。
2.7.2数据生产者
WBEM的核心是基于DMTF设计的
CIM。CIM规定了管理系统如何表示从计算机传递到应用程序或设备的信息。它还从系统级的层次上确定了管理系统的每一部分的描述,大至整个系统,小到一个应用程序或一个设备。这样,开发者就可以用CIM来定义自己所写的管理程序中所需的组件,通常用管理对象格式(Managed Obect Format,MOF)语言来描述 。
除了为对象定义类之外,数据生产者还必须为WMI提供这些对象的编程接口。WMI根据数据生产者提供接口的不同将它们分成若干类。注意,一个数据生产者可能同时具有多个特征,因此它可以同时是类和事件的生产者。为了说明这一点,看一个同时具有若干个特征的数据生产者一事件日志数据生产者,它定义了多个对象,包括一个事件日志计算机、一个日志记录和一个日志文件。因为它在定义这些对象时用到了类定义,所以它是一个类类型的数据生产者,必须将这些类的定义传给WMI。同时它又是一个实例类型的数据生产者,因为它为自己所属的苎几个类定义了多个实例,其中一个类是事件日志文件类,这个数据生产者用这个类为每个系统日志(系统事件日志、应用程序事件日志和
安全事件日志)都创建了一个实例。
事件日志数据生产者定义了实例数据,这样管理应用程序就可以列举它们。为了让应用程序用WMI
存储和
备份这些事件日志文件,数据生产者为日志文件对象提供了实现这些功能的方法。这样做使得这个数据生产者又是一个方法类型的生产者。最后,可以要求在每一个新的记录写个日志文件时,数据生产者都要给应用程序发送消息,这样这个数据生产者实际又有事件类型生产者的属性,因为它用到了WMI的事件响应机制。
2.7.3 通用信息模型和管理对象格式语言
CIM紧随着面向对象语言(如
C++、Java)的步伐,这些语言以类的表示形式设计模板。类的运用使开发人员得以使用强大的继承和合成建模技术。子类可以继承父类的特性,并且可以增加它们自己的特性和重载它们从父类继承来的特性。类还可以组合,开发者可以创建一个包含其他类的类。
DMTF提供了多样的类作为WBEM标准的一部分。这些类是CIM的基本语言,代表了适用于所有管理领域的对象,是CIM核心模块的一部分。一个核心类的例子是CIM_Managed System Element,这个类包含了很少的基本属性,基本属性标志了物理部件(如硬件设备),还标志了逻辑部件(如进程、文件)。这些属性包含了标题、描述、安装日期和状态。因而,CIM_LogicalElement和CIM_PhysicalElement类继承CIM_Managed SystemElement的属性,这两个类也是CIM核心模块的一部分。WBEM标准称这些类为抽象类,因为它们只为其他类继承而存在(也就是说,没有一个抽象类的对象实例存在)。我们由此可以把抽象类看作是定义了其他类使用的属性的模板。
第二种类代表了那些对于管理领域特殊但又并非特殊实现的对象。这些类组成了通用模块并被认为是核心模块的扩展。一个通用模块类的例子是CIM_FileSystem类,它继承了类CIM_Logica!Element的属性。因为实际上每一个操作系统,包括Windows 2000/XP、
Linux和其他版本的UNIX。
2.7.4 WMI名字空间
类定义了对象的属性,而在系统中对象是类的一个实例。WMI使用一个名字空间来组织对象,名字空间由几个子名字空间组成,WMI层次地排列这些子空间。一个管理应用程序在名字空间里访问类之前必须先连接上这个名字空间。
WMI命名名字空间的根目录为root。所有WMI有四个在root下预先定义好的名字空间:
CIMV2、Default、Security和WMI。这些名字空间中的一些名字空间包括了其他的名字空间。比如,CIMV2包括了Applications和ms_409namespaces作为它的子名字空间。生产者有时也定义它们自己的名字空间。
与
文件系统的名字空间不同,文件系统是由目录和文件的分级结构构成,而WMl名字空间只有一个层次。WMI使用对象的属性而不是像文件系统那样使用名字,它定义这些属性鉴别对象。管理应用程序用关键字名指定类名以定位一个名字空间中的特殊对象。因此,每一个类的实例都必须通过关键字的值唯一确定。比如,事件日志生产者使用Win32_NTLogEvent类来描述事件日志中的记录。这个类有两个关键字:Logfile,一个字符串;RecordNumber,一个无符号整数。向WMI查询事件日志记录实例的管理程序从标志此记录的那对关键字得到它们。应用程序使用下面示例中对象路径名的语法来访问记录。名字开始的部分(\\PICKLES)标志了对象所在的计算机,第二部分(\CIMV2)是对象所处的名字空间。类名紧跟在冒号后面,关键字名和它相关的值跟在其后,关键字值用逗号隔开。
2.7.5 类联合
许多对象类别都通过一些途径同其他对象类别相关联。WMI使供应者构造一个类联合来代表两个类之间的逻辑连接。类联合把一个类同另一个类关联起来,所以它只有两个属性:一个类名和Refmodifier。给定一个对象,管理应用程序可以查询被关联的对象。通过这种途径,生产者定义了一个对象层次。典型的Win32系统组件把它们的对象放在CIMV2名字空间里。对象浏览器首先定位Win32 ComputerSystem对象实DSOLOMON,它代表了计算机,然后对象浏览器获得与此对象关联的其他对象并在DSOLOMON下展示出来。对象浏览器用户界面用一个双向箭头文件夹图标来展示关联对象,被关联的对象在这个目录下展示。
2.7.6 WMI对象浏览器
在对象浏览器里,你可以发现事件日志生产者关联类Win32 NTLogEventComputer在DSOLOMON的下面并且有众多的Win32 NTLogEvent实例存在。在对象浏览器里选择一个Win32_NT LogEvent类的实例将会在右边的面板的属性标签中展示类的属性。微软公司计划使用对象浏览器来帮助WMI开发者检查他们的对象,但是一个管理应用程序可以完成同样的操作并且可以以更易理解的方式展示或收集类的属性信息。
2.7.7 WMI执行
WMI基础设施主要在“\Winnt\System32\Wbem\Winmgmt.exe”文件中实现。这个文件以Win32服务方式运行,在一个管理应用程序或WMI生产者试图第一次访问WMI APIs时启动它。大多数WMI组件缺省驻留于“\Winnt\System32 and\Winnt\System32\Wbem”,包括Win32 MOF文件、内建的生产者动态链接库和管理应用程序WMI动态链接库。
“\Winnt\System32\Wbem”下的目录保存库、记录文件和第三方MOF文件。WMI执行库——
称为CIMOM库——“\Winnt\System32\Wbem\Repository\Cim.rep”文件。Winmgm[认可众多同
库关联的的注册表设定(包括不同的内在性能参数,比方说CIMOM备份的地址和时间间隔),库的“HKLM\SOFTWARE\Microsoft\WBEM\CIMOM”注册表主键值保存了这些注册设定。设备驱动器用特殊的接口来提供数据和接受从WMI来的命令——调用WMI系统控制命令。因为这些接口是跨平台的,所以它们归属于“Xroot\WMI”名字空间下。
2.7.8 WMI安全
WMI在名字空间层上执行安全措施。如果一个管理应用程序成功地连接上了名字空间,应用
程序可以查看和访问所有处于那个名字空间的对象的属性。管理员可以使用WMI控制应用程序
来控制何种用户可以访问一个名字空间。