WMI 提供程序
WMI 提供程序在 WMI 和托管资源之间扮演着中间方的角色。提供程序代表使用者应用程序和脚本从 WMI 托管资源请求信息,并发送指令到 WMI 托管资源。例如,清单 1 和清单 2 使用内置 Win32 提供程序来检索内存和服务相关信息。清单 3 使用内置的事件日志提供程序来从 Windows 事件日志检索记录。
通过将托管资源公开给基于 WMI 标准的、统一访问模型的 WMI 基础结构,提供程序隐藏托管资源独有的实现详细信息。WMI 提供程序使用托管资源本机 API 与其相应的托管资源通讯,使用 WMI 编程接口与 CIMOM 通讯。例如,内置的事件日志提供程序调用 Win32 事件日志 API 来访问事件日志。
基于 WMI 的可扩展体系结构,软件开发人员可以开发并集成附加提供程序来公开其产品特有的管理函数。监视 Exchange 连接器状态的 Exchange Server 2000 提供程序就是一个这样的示例。同样,Application Center、Operations Manager、Systems Management Server、Internet Information Server 和 SQL Server 都包含 WMI 提供程序。
提供程序通常作为驻留在 %SystemRoot%\system32\wbem 目录中的动态链接库 (DLL) 实现。WMI 包括很多针对Windows 2000、Windows XP 以及 Windows Server 2003 系列操作系统的内置提供程序。内置提供程序(也被称为标准提供程序),从已知的操作系统源(如 Win32 子系统、事件日志、性能计数器、注册表等)提供数据和管理函数。表 1 中列出一些包含在 Windows 2000、Windows XP 和 Windows Server 2003 系列操作系统中的 WMI 提供程序。
Active Directory 提供程序 |
dsprov.dll |
root\directory\ldap |
将 Active Directory 对象映射到 WMI。 |
事件日志提供程序 |
ntevt.dll |
root\cimv2 |
管理 Windows 事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。 |
性能计数器提供程序 |
wbemperf.dll |
root\cimv2 |
提供对原始性能数据的访问。 |
注册表提供程序 |
stdprov.dll |
root\default |
读取、写入、枚举、监视、创建、删除注册表项和值。 |
SNMP 提供程序 |
snmpincl.dll |
root\snmp |
提供对 SNMP MIB 数据的访问,并从 SNMP 托管设备捕获。 |
WDM 提供程序 |
wmiprov.dll |
root\wmi |
提供对 WDM 设备驱动程序中信息的访问。 |
Win32 提供程序 |
cimwin32.dll |
root\cimv2 |
提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM 用户及组,以及更多资源的信息。 |
Windows 安装程序提供程序 |
msiprov.dll |
root\cimv2 |
提供对已安装软件信息的访问。 |
Windows XP 和 Windows Server 2003 包含很多附加的标准提供程序。如需标准提供程序的完整列表,参见 WMI Software Developers Kit (SDK) 文档中的 WMI 提供程序参考。
CIMOM
您可以将 CIMOM 想象为 WMI 信息代理。所有的 WMI 请求和数据都经过 CIMOM。Windows Management Instrumentation 服务 (winmgmt.exe),在 Windows XP 和 Windows Server 系列操作系统上提供了 CIMOM 角色,在通用服务主机进程 (svchost.exe) 的控制下运行。
注在运行 Windows 2000 或 Windows NT 4.0 Service Pack 4 的计算机上,WMI 服务作为一个单独的服务进程运行。在运行 Windows Millennium Edition (Me)、Windows 98 或 Windows 95 OSR 2.5 的计算机上,WMI 作为一个标准可执行进程运行。
除了提供公共接口(使用者通过它访问 WMI)之外,CIMOM 还向 WMI 基础结构提供下列核心服务:
• |
提供注册。WMI 利用 CIMOM 提供注册位置和功能信息。此信息存储在 CIM 储存库中。 |
• |
请求传送。CIMOM 使用提供程序注册信息,将使用者请求传送到合适的提供程序。 |
• |
远程访问。使用者通过连接到远程系统上的 CIMOM 访问启用 WMI 的远程系统。一旦连接建立,使用者可以执行与在本地可以执行的操作相同的操作。 |
• |
安全性。在本地计算机或是远程计算机上,允许用户在连接到 WMI 之前通过验证每个用户的访问标记,CIMOM 控制对 WMI 托管资源的访问。WMI 并不覆盖或阻止由操作系统提供的安全性。 |
• |
查询处理。允许使用者使用 WMI 查询语言(WMI Query Language,WQL)发出关于任何 WMI 托管资源的查询。例如,您可以查询所有发生在过去 24 小时的,符合一个特定事件 ID 的事件的事件日志。CIMOM 只在提供程序本身不支持查询操作的情况下执行查询计算。 |
• |
事件处理。允许使用者订阅表示对 WMI 托管资源更改的事件。例如,您可以订阅表明逻辑磁盘驱动器上的空间何时下降到可接受的阈值以下的事件。CICOM 按一个指定的间隔轮询托管资源,并在满足订阅条件时生成一个事件通知。 |
管理应用程序、管理工具和脚本调入 CIMOM 以挖掘数据、订阅事件或执行一些其他的与管理相关的任务。CIMOM 获得必需的提供程序和类信息以满足来自 CIM 的使用者的请求。CIMOM 使用从 CIM 获得的信息,将使用者的请求传递到合适的提供程序。
CIM 储存库
WMI 的基本思想是 — 可以用一个架构统一表示来自不同源的配置和管理信息。CIM 就是这个架构,还调用了模型化托管环境和定义每个由 WMI 公开的数据块的对象储存库或类存储。该架构基于 DMTF 公共信息模型标准。
与建立在类概念基础上的 Active Directory 的架构非常相似,CIM 由类 组成。类是一个 WMI 托管资源的一个蓝图。然而,不同于 Active Directory 类表示创建并存储在目录中的对象,CIM 类通常表示动态资源。就是说,资源的实例并不存储在 CIM 中,而是通过基于使用者请求的提供程序动态检索。其原因很简单,大多数 WMI 托管资源的操作状态更改很频繁,因而必须按需读取以确保检索的是最新的信息。
注在 CIM 的上下文中,储存库这一术语有些被误解。尽管 CIM 是一个储存库,而且能够存储静态数据,但其主要角色是存储托管资源的蓝图。
与 Active Directory 类相似之处还有就是,CIM 类是分级组织的,每一级的子类从父类继承。DMTF 维护一组核心和公共基类,系统和应用程序软件开发人员(如 Microsoft 的那些)从这些类派生和创建系统(或应用程序)特定的扩展类。
类被分组到命名空间 中,命名空间是表示一个特定的管理区域的类逻辑组。例如,命名空间 root\cimv2 包括大部分表示通常与计算机和操作系统相关联的资源的类。在前面的脚本中使用的类(Win32_LogicalMemoryConfiguration、Win32_Service 和Win32_NTLogEvent)驻留在命名空间 root\cimv2,它们只是在 CIM 中定义的数百个类中的三个。
CIM 类由属性和方法构成。属性描述 WMI 托管资源的配置和状态,方法是在 WMI 托管资源上执行操作的可执行函数。
注 不要将由 CIM 定义的方法和属性与由 WMI 脚本库中的自动化对象提供的方法和属性相混淆。
从物理校对看,CIM 驻留在 %SystemRoot%\system32\wbem\Repository\FS\ 目录中,由下列 4 个文件组成:
• |
index.btr。二叉树 (btree) 索引文件。 |
• |
|
• |
objects.data。存储托管资源定义的 CIM 储存库。 |
• |
|
注在 Microsoft Windows 2000 和 Windows NT 4.0 Service Pack 4 中,CIM 存储在 %SystemRoot%\system32\wbem\Respository\cim.rep 中。在 Windows Millennium Edition (Me)、Windows 98 和 Windows 95 OSR 2.5 操作系统中,CIM 存储在 %windir%\system\wbem\Respository\cim.rep 中。
虽然 CIM 基于面向对象的设计原则,但是您无须成为信息建模或架构设计的专家,就可以有效地使用 WMI 并编写基于 WMI 的脚本。重要的是您了解 CIM 的基础结构和组织,并了解如何浏览和解释它的内容。
WMI 脚本库
WMI 脚本库提供自动化对象集,脚本语言(如 VBScript、Jscript 及 ActiveState 的 ActivePerl)利用它访问 WMI 基础结构。
WMI 脚本库中的自动化对象为 WMI 基础结构提供一个一致且统一的脚本模型。如前面所示,一旦您了解如何使用 WMI 脚本库检索一个托管资源类型,您就可以轻松使用相同的步骤来检索其它的 WMI 托管资源。例如,您可以使用前面列出的 3 个脚本中的任何一个,并很容易地修改这个脚本来检索在远程计算机上运行的进程 (Win32_Process) 信息、处理器 (Win32_Processor) 信息、操作系统 (Win32_OperatingSystem) 信息,或者由 WMI 公开的数百个托管资源中的任何一个。
WMI 脚本库在一个名为 wbemdisp.dll 的单个 DLL 中实现,该 DLL 物理驻留于 %SystemRoot%\system32\wbem 目录中。WMI 脚本库还包括一个名为 wbemdisp.tlb 的类型库。您可以使用 WMI 脚本类型库来从基于 XML 的 Windows 脚本文件(扩展名为 .wsf 的 WSH 脚本)引用 WML 常数。