Microsoft Windows Management Instrumentation (WMI) 技术是分布式管理任务组 (DMTF) 基于 Web 的企业管理 (WBEM) 方案的 Microsoft 实现,它扩展了通用信息模型 (CIM) 以便在基于 Windows 的管理环境中表示管理对象。通用信息模型(也是 DMTF 标准)是一个可扩展的数据模型,它用于在受管理环境中以一致、统一的方式在逻辑上组织管理对象。

WBEM 是基于通用信息模型的 DMTF 方案和技术,它建立管理基础结构标准,并为在企业环境中访问各种硬件和软件管理系统中的信息提供标准化的方法。使用 WBEM 标准,开发人员可以创建工具和技术,用其降低企业管理的复杂性和成本。通过提供这种标准,WBEM 为行业范围内降低总拥有成本 (TCO) 的工作做出了贡献。TCO 指的是与计算机硬件和软件购买、部署和配置、硬件和软件更新、培训、维护和技术支持相关的管理成本。

WBEM 提供了一个集成点(通过这个集成点可以访问管理源中的数据),而且它补充并扩展了现有的管理协议和规范,如简单网络管理协议 (SNMP)、桌面管理接口 (DMI) 和通用管理信息协议 (CMIP)。

Windows Management Instrumentation 技术

Windows Management Instrumentation (WMI) 技术是一种支持 CIM、托管对象格式 (MOF) 和通用编程接口语法的管理基础结构。MOF 语法以人和计算机可读的形式来定义 CIM 架构的结构和内容。Windows Management Instrumentation 提供了一组功能强大的服务,其中包括基于查询的信息检索和事件通知。这些服务和管理数据通过组件对象模型 (COM) 编程接口进行访问。WMI 脚本接口还提供脚本支持。

WMI 技术提供:

  • 对监视器、命令的访问,并通过一组通用、统一的接口来控制任何托管对象,不管其基础规范机制如何。WMI 是一种访问机制。

  • Windows 操作系统的操作、配置和状态的一致性模型。

  • 为所有管理信息提供单一访问点的 COM 应用程序编程接口 (API)。

  • 与其他 Windows 管理服务的互操作性。此方法可以简化创建集成的、构架良好的管理解决方案的过程。

  • 一种灵活的、可扩展的体系结构。通过编写称为 WMI 提供程序的代码模块,开发人员可以扩展信息模型,以包含新的设备、应用程序等。

  • 对 Windows 驱动程序模型 (WDM) 的扩展,以捕获设备驱动程序和内核端组件中的检测数据和事件。

  • 一种功能强大的事件体系结构。它允许对管理信息更改进行识别、累积、比较,并与其他管理信息相关联。也可以将这些更改转发到本地或远程管理应用程序。

  • 一种丰富的查询语言,它允许对信息模型进行详细的查询。

  • 一种可编脚本的 API,开发人员可以用它来创建管理应用程序。脚本 API 支持多种语言,其中包括 Microsoft Visual Basic、Visual Basic for Applications (VBA)、Visual Basic Scripting Edition (VBScript)、Microsoft JScript 开发软件。除了 VBScript 和 JScript,开发人员还可以将任何支持 Microsoft ActiveX 脚本技术的脚本语言实现(例如,Perl 脚本引擎)与此 API 一起使用。此外,还可以使用 Windows Script Host 或 Microsoft Internet Explorer 来编写使用此接口的脚本。Windows Script Host,像 Internet Explorer 一样,用作 ActiveX 脚本引擎的控制器引擎。Windows Script Host 支持在 VBScript 和 JScript 中编写脚本。

WMI 体系结构概述

WMI 技术体系结构由以下内容组成:

  • 管理基础结构 - 这包括 CIM 对象管理器,它使应用程序能够对管理数据和称为 CIM 对象管理器储存库的管理数据中心存储区域进行统一访问。

  • WMI 提供程序 - 这些提供程序充当 CIM 对象管理器和托管对象之间的媒介。提供程序使用 WMI API 为 CIM 对象管理器提供托管对象中的数据、代表管理应用程序处理请求以及生成事件通知。

管理基础结构由 CIM 对象管理器和 CIM 对象管理器储存库组成。应用程序依靠对象管理器来处理管理应用程序和数据提供程序之间的接口。WMI 通过对使用 COM 的 Windows 管理服务提供通用编程接口使这些通信变得更为便利。此 COM API 提供事件通知和查询处理服务,并可以在多种编程语言环境中使用,如 C 和 C++。CIM 对象管理器储存库保存 CIM 和扩展架构,以及数据信息或数据源的详细信息。CIM 对象管理器在处理来自托管对象的管理应用程序的请求时使用此储存库中的架构数据。

托管对象是使用 CIM 进行建模的物理或逻辑企业组件。例如,托管对象可以是硬件(如电缆),也可以是软件(如数据库应用程序)。管理应用程序可以通过 CIM 对象管理器访问托管对象。

管理应用程序是使用或处理来自托管对象的信息的应用程序或 Windows 服务。管理应用程序可以通过 WMI API 中的方法之一,对 CIM 对象管理器发出请求来访问托管对象的信息。

WMI 提供程序是标准的 COM 和分布式组件对象模型 (DCOM) 服务器,它们充当托管对象和 CIM 对象管理器之间的媒介。如果 CIM 对象管理器收到来自管理应用程序的请求,但该请求中的数据无法从 CIM 对象管理器储存库中获得,或 CIM 对象管理器不支持该请求中的事件通知,则它会将请求转发到 WMI 提供程序。提供程序为特定于其特定域的托管对象提供数据和事件通知。

若要实现提供程序,应当使用下列受支持的服务器类型之一:

• Microsoft Windows 2008 服务,本地或远程。

• 标准可执行文件(.exe 文件),本地或远程。

• 进程内的动态链接库 (DLL)。

请注意,推荐的服务器类型是本地或远程 Windows 2008 服务和标准可执行文件。

WMI 附带了内置的提供程序(或标准提供程序),它们用于提供来源(如系统注册表)中的数据。内置提供程序包括:

  • Active Directory 提供程序 - 充当存储在 Active Directory 服务中的所有信息的网关。允许使用单个 API 访问 WMI 和 Active Directory 中的信息。

  • Windows Installer 提供程序 - 允许通过 WMI 完全控制 Windows Installer 和软件安装。还提供有关使用 Windows Installer 安装的任何应用程序的信息。

  • 性能计数器提供程序 - 公开用于计算显示在系统监视器工具中的性能值的原始性能计数器信息。系统上安装的任何性能计数器都可以通过此提供程序自动显示出来。

  • 注册表提供程序 - 允许创建、读取和写入注册表项。可以在修改指定的注册表项时生成 WMI 事件

  • SNMP 提供程序 - 充当系统和设备的网关(如果这些系统和设备使用简单网络管理协议 (SNMP) 进行管理)。可以读取和写入 SNMP MIB 对象变量。SNMP 陷阱可以自动映射到 WMI 事件。

  • 事件日志提供程序 - 用于访问 Windows Server 2008 事件日志中的数据和事件通知。

  • Win32 提供程序 - 提供有关操作系统、计算机系统、外围设备、文件系统和安全信息的信息。

  • WDM 提供程序 - 为用户输入设备、存储设备、网络接口和通信端口提供低层次的 Windows 驱动程序模型的驱动程序信息。

  • 视图提供程序 - 允许从现有类构建新的聚合类。可以仅针对感兴趣的信息对源类进行筛选,多个类中的信息可以合并到一个类,而多个计算机中的数据可以整合到一个视图中。

WMI 技术还提供对第三方自定义提供程序的支持。自定义提供程序可用于处理与特定于环境的托管对象有关的请求。提供程序通常使用 MOF 语言来定义和创建类。提供程序使用 WMI API 来访问 CIM 对象管理器储存库,并响应最初由应用程序发出的 CIM 对象管理器请求。

简单网络管理协议概述

简单网络管理协议 (SNMP) 是一个网络管理标准,它为管理 TCP/IP 网络定义了一个策略。

SNMP 使用分布式体系结构,其中包括:

  • 多个受管理节点,每个节点都带有一个称为代理的 SNMP 实体,由它提供对管理规范的远程访问。

  • 至少一个称为管理器的 SNMP 实体,由它运行监视和控制受管理元素的管理应用程序。受管理元素是诸如主机、路由器等的设备;可通过访问其管理信息来监视和控制这些设备。

  • 管理协议 SNMP,用于在管理站和代理之间传达管理信息。管理信息指驻留在称为管理信息库 (MIB) 的虚拟信息存储中的托管对象的集合。

SNMP 消息

管理系统和代理使用 SNMP 消息传递主机信息。可以使用用户数据报协议 (UDP) 发送这些消息,使用 Internet 协议 (IP) 在管理系统和主机之间路由这些消息。

管理信息库包含管理系统所请求的信息。网络计算机的 MIB 可能包含有关网络接口卡、可用硬盘驱动器空间、驱动程序和应用程序版本等的配置和性能信息。只要系统本身支持所请求信息的集合,便可以写入和加载其他 MIB 公布为集合指定的数据。

处理信息请求

当管理系统请求信息时,将按照下列顺序执行此过程:

  1. 管理系统使用代理的 IP 地址将请求发送给代理。

  2. 代理形成一个 SNMP 数据报,该数据报包含一个 SNMP 消息和管理系统所属的社区名称。

  3. SNMP 代理接收数据报并确认社区名称。如果社区名称有效,则 SNMP 代理检索相应的数据。否则,如果社区名称无效,则拒绝请求。如果代理已配置为发送身份验证陷阱,则发送陷阱消息。

  4. SNMP 数据报与所请求的信息一起被返回到管理系统。

消息

使用的 SNMP 消息类型如下:

  • Get 这是一个请求消息。SNMP 管理系统使用 Get 消息在 SNMP 代理上请求有关 MIB 条目的信息。

  • Getnext 请求消息的一个类型,可用于浏览托管对象的整个树。

  • Getbulk 请求的一个类型,它指定代理在消息大小限制的范围内尽可能多地传输数据。

  • Set 它用于将更新的 MIB 值发送和分配到代理。

  • Notify (或 Trap)这是一个未经请求的消息,当代理检测到在受管理主机本地出现特定的事件类型时,代理将向 SNMP 管理系统发送此消息。

SNMP 事件(或陷阱)是在未经请求的情况下发送到筛选事件的管理站的;因此,会影响网络流量。通过 WMI,会在本地筛选事件,只有那些通过筛选条件的事件才会通过网络发送,因此减少了感兴趣事件所需的带宽。

对 SNMP 的 WMI SDK 支持

SNMP 提供程序包括下列组件:

  • 类、实例和事件提供程序,它们将 SNMP 信息建模和处理集成到 WMI 中。这些 SNMP 提供程序将对象值的集合映射到 CIM 类实例的属性值。

  • SNMP 信息模块编译器,它将本地 SNMP 架构信息编译成 CIM 所使用的格式。

SNMP 提供程序

SNMP 提供程序返回动态信息。可以按照下列两种方法之一指定实例提供程序使用的类集合:

  • 静态 - 通过在与代理设备相关联的 CIM 对象储存库命名空间中创建类。

  • 动态 - 通过使用 SNMP 类提供程序,它会返回位于 SNMP 模块信息储存库 (SMIR) 命名空间中的类集合。

此外,还可以指定是否对从 SMIR 命名空间中返回的类集合使用相关性。相关类定义已知给定 SNMP 代理在发生枚举时会支持的类集合。非相关枚举返回在 SMIR 命名空间中出现的所有类,而不管代理设备是否支持它们。

SNMP 提供程序包括:

  • SNMP 类和实例提供程序,应用程序使用它们来访问和修改与 SNMP 设备相关的数据。

  • SNMP 事件提供程序,它从 SNMP 陷阱和通知生成事件。它们报告相同类型的事件,但使用的格式不同:内嵌和引用。内嵌是指事件类具有描述直接从 TRAP-TYPE 和 NOTIFICATION-TYPE 宏中映射的信息的简单属性,这些内容在下一节中介绍。引用类对宏中出现的信息进行摘要,以便共享同一个类和实例的属性作为嵌入对象出现。这样可以提取 __RELPATH,以便可以在接收事件后检索与陷阱相关的唯一实例。若要选择一种格式,客户需注册一个特定的事件类。

将设备数据映射到 CIM 类

SNMP 提供程序通过下列方法将设备数据映射到 CIM 类:

  • 枚举 SNMP 类定义。若要枚举一组类定义,应用程序可以调用 IWbemServices::CreateClassEnum 或 IWbemServices::CreateClassEnumAsync。

    使用 OBJECT-TYPE 宏可以将 MIB 对象映射到 SNMP CIM 类;使用 TRAP-TYPE 和 NOTIFICATION-TYPE 宏可以将事件映射到类。

    OBJECT-TYPE 宏用于描述 MIB 对象的基本特征。SNMPv1 TRAP-TYPE 和 SNMPv2C NOTIFICATION-TYPE 宏描述 SNMP 事件的特征。

  • 实例化 SNMP 类定义。若要实例化类定义,应用程序可以调用 IWbemServices::GetObject 或 IWbemServices::GetObjectAsync。

  • 枚举 SNMP 类实例。SNMP 实例提供程序处理请求,以枚举与表示设备 MIB 的类有关的实例。

  • 实例化 SNMP 类实例。SNMP 实例提供程序处理请求,以实例化表示 MIB 对象的类的实例。

  • 检索 SNMP 类实例。若要检索 SNMP CIM 类的一个特定实例,应用程序可以调用 IWbemServices::GetObject 或 IWbemServices::GetObjectAsync。

SNMP 和 CIM 架构

SNMP 用来定义对象的架构与在 WMI 通用信息模型中所使用的架构不同。SNMPv1 和 SNMPv2 架构称为管理信息结构 (SMI);它被打包为 MIB 文件。为了定义对象,MIB 文件使用了抽象语法表示法 1 (ASN.1)(一种标准语言)和宏定义,这些宏定义用作描述对象的模板。这些宏提供有关对象的信息,其中包括其名称、标识符、语法、描述、访问权限等。

WMI SNMP 提供程序转换下列 MIB 宏:

  • OBJECT-TYPE 描述对象的基本特征,如对象名称、语法、访问权限等等。与 SNMPv1 和 SNMPv2C 有关。

  • TEXTUAL-CONVENTION 将名称(在某些情况下为值的范围)分配到现有数据类型。只与 SNMPv2C 有关。

  • TRAP-TYPE 描述事件消息(陷阱)。只与 SNMPv1 有关。

  • NOTIFICATION-TYPE 描述事件消息(通知)。只与 SNMPv2C 有关。

SNMP 类提供程序根据 CIM 命名空间枚举和实例化一组类定义。它通过使用 MIB 交换码和 SNMP 模块信息储存库(SNMP 架构数据库)来执行此操作。SNMP 类提供程序支持相关和非相关模式。可以通过设置与类型布尔值相关联的上下文值 (IWbemContext) 并将其传入 IWbemServices 方法来指定这些模式之一。SNMP 类提供程序支持类定义的枚举和类定义的检索。

SNMP 实例提供程序将 SNMP MIB 对象映射到类实例。

SNMP 命名空间

若要定义网络设备的视图,可以使用 SNMP 命名空间。可以使用 WMI SDK 的 WMI Common Information (CIM) Studio 应用程序、编译 MOF 文件或使用 WMI API 以编程方式来创建 SNMP 命名空间。

命名空间系统类用于表示 SNMP 命名空间。若要生成新的命名空间,可以创建此类的实例。必须至少将一个描述符(或限定符)与类实例相关联。限定符包含特定于实现的上下文信息和定义 SNMP 提供程序访问 SNMP 代理的方式的传输属性。

SNMP 设备表示法

SNMP 设备在 WMI 内部通过使用包含一组实例限定符的代理命名空间来表示。这些限定符描述与设备有关的传输特征。WMI 使用 MOF 文件 snmpreg.mof 来创建 \\.\root\snmp\localhost 命名空间,这是一个表示本地 SNMP 代理的标准命名空间。

SNMPv2C

在 WMI 上下文中支持 SNMPv2C。SNMPv2C 的主要目的是为 SNMP 提供更加安全的上下文。此版本使用简单和不安全的基于密码的身份验证功能,它被称为社区功能(在 SNMPv1 中提供)。SNMPv2 SMI 对社区安全新增并增强了某些功能,如在 SNMPv1 SMI 特定的数据类型中包括位字符串、网络地址和计数器。此外,SNMPv2 SMI 还指定了信息模块,由这些模块指定一组相关的定义。SNMPv2 还定义了两种新的协议操作:GetBulk 和 Inform。

安全

WMI 安全既可以验证用于本地计算机访问的用户登录信息,也可以验证用于远程访问的用户登录信息。WMI 为经过验证的用户授予对整个 CIM 储存库的某种形式的受控访问权限。在其当前版本中,WMI 不为系统资源(如单个的类和实例)提供安全。但是,管理员可以使用 WMI 控制对架构操作的全局权限,例如将某些用户的访问权限限制为只读操作。WMI 还支持每个命名空间的安全。此外,SNMP 提供程序为所有基于 SNMP 的安全提供支持,包括 SNMPv2C 中的安全增强。

SNMP 信息模块编译器

SNMP 信息模块编译器用于将 MIB 中定义的本地 SNMP 管理信息编译到可以与 SNMP 提供程序一起使用的等效 CIM 架构定义中。CIM 架构可以作为 MOF 文件的输出存在,也可以被加载到 SNMP 架构数据库(SNMP 模块信息储存库或 SMIR)中。SNMP 动态类提供程序使用 SNMP 模块信息储存库创建和检索类定义的实例。

SNMP 信息模块编译器以命令行模式作为可执行文件运行,它使用一个 SNMP 信息模块作为输入,并使用可能需要的任何其他文件来解析外部引用。SNMP 信息模块是管理信息的集合,它通常由 MIB 模块、AGENT-CAPABILITIES 和 MODULE-COMPLIANCE 语句共同组成。AGENT-CAPABILITIES 语句描述代理与它所支持的 MIB 模块集的兼容性。MODULE-COMPLIANCE 语句描述代理的与对象定义有关的功能。

SNMP 信息模块编译器还提供下列功能:

  • 在信息模块上执行检查操作。例如,它根据子模块中的信息检查本地语法和外部引用。

  • 删除 SMIR 中以前加载的所有数据,或删除某个信息模块中的加载数据。

  • 返回指定文件的 ASN.1 模块名称,或返回指定文件中所有已导入模块的 ASN.1 模块名称。

  • 返回当前在 SMIR 中加载的所有 SNMP 信息模块的 ASN.1 模块名称。

  • 执行对已导入模块的自动解析,而不需要用户手动指定所需模块。

  • 执行无提示加载操作模式,它不生成输出,但可用于在安装操作期间将数据加载到 SMIR。

请参阅