向 WMI 提供数据

WMI 通过 WMI 提供程序为可管理的对象提供数据。 提供程序从系统组件(如进程或检测应用程序,如 SNMP 或 IIS)中检索数据,并通过 WMI 将该数据传递到管理应用程序。 例如,当应用程序或脚本请求使用 WMI Win32 _ process 类处理信息时,数据是通过预安装的提供程序动态获取的。

本主题中讨论了以下部分:

为可管理的对象创建模型

在开发提供程序之前,请创建一个数据模型,用于表示通过 WMI 公开的可管理的对象。 你计划提供程序将公开的数据对象。 例如,如果计划管理桌面背景的屏幕分辨率,则必须确定如何在 托管对象格式 (MOF) 文件中为桌面建模。

创建有用的模型:

  • 确定真实情况并对客户可能要读取和更新的信息进行建模 (例如,更改每个可管理对象) 的背景图像。 这些是类属性。
  • 确定客户可能需要对每个可管理对象执行的操作类型。 这些是方法。

为可管理的对象实现模型

若要实现可管理对象的模型,请创建包含表示每个对象的 WMI 类的 MOF 文件。 有关创建 MOF 文件以定义 WMI 类的详细信息,请参阅 设计 (MOF) 类托管对象格式。 尽管提供程序及其类的注册通常包含在 MOF 文件中,但也可以使用 COM API 来创建类和方法。 有关详细信息,请参阅 开发 WMI 提供程序

备注

若要确保在 WMI 发生故障和重新启动时将托管对象的所有 WMI 类定义还原到 wmi 存储库,请在 托管对象格式 (MOF)文件中使用 # 杂注自动恢复预处理器指令。

创建 MOF 文件后,使用 Mofcomp.exe 工具对其进行编译。 这会通知你 MOF 文件中的错误,并将 MOF 文件中定义的 WMI 类添加到 wmi 存储库 ,以便提供程序可以使用该类。

确定要实现的提供程序类型

WMI 支持一定数量的提供程序类型,这些类型决定了提供程序所提供的信息的性质以及提供程序支持的操作。

提供程序类型为:

大多数提供程序是实例提供程序和方法提供程序。 实例提供程序是最常用的提供程序,它提供给定类的实例。 方法提供程序实现一个或多个类的方法。 有关提供程序类型的详细信息,请参阅 开发 WMI 提供程序

确定提供程序) 模型的宿主 (实现

WMI 提供程序是作为 COM 对象实现的二进制文件。 这意味着每个提供程序都有一个 DLL 文件,该文件可在特定进程和安全上下文中执行。 WMI 指的是 托管模型。 WMI 提供多种宿主提供程序的方法,但最常见的方法是使用耦合提供程序模型 (在 NetworkServiceHost 安全上下文中的 WMI 进程) 下运行。 WMI 提供程序可以分为耦合或 分离

术语 "耦合" 或 "分离的提供程序" 确定与提供程序运行的主机进程有关 WMIPRVSE.EXE 处理的 WMI。 最佳做法是确定提供程序所公开的管理数据以及它所依赖的 API 或应用程序在系统中是否始终可用。 如果提供程序依赖的 API 或应用程序始终可用 (在系统) 上运行,则提供程序应为耦合的提供程序,如果不是,则必须是分离的访问接口。 有关托管模型的详细信息,请参阅 提供程序托管和安全性

有关创建耦合提供程序的详细信息,请参阅 通过编写提供程序向 WMI 提供数据; 有关在应用程序中包含分离的提供程序的信息,请参阅 在应用程序中合并提供程序

耦合性提供程序可以被描述为进程内 (进程内) 或进程外 (进程外) 。 当耦合提供程序是进程内提供程序时,它将在一个共享 WMIPRVSE.EXE WMI 宿主进程下运行,并作为 COM 进程内服务器 ( .dll) 实现。 当提供程序是进程外提供程序时,它由 WMI 在客户端或事件的请求上启动,但它作为一个独立的进程运行,并作为可执行文件 () 来实现。

实现提供程序

可以通过以下方式实现提供程序:

  • 在 Visual Studio 中使用 ATL 向导。

    ATL 向导生成实现耦合提供程序的提供程序代码。 使用 ATL 向导时,您可以指定要创建进程内 ( .dll) 或进程外 () 提供程序运行时模型。

  • 定义要包含提供程序的 COM 对象。

    提供程序代码是用 c + + 编写的。 有关详细信息,请参阅 通过编写提供程序向 WMI 提供数据

  • 使用 .NET Framework 中的类命名空间 中的类来创建使用托管代码的访问接口。 (不再支持 system.object 命名空间。 )

    此过程将创建一个分离的提供程序。

向 WMI 和系统注册提供程序

在使用使用者提供的提供程序之前,请务必将其注册到 WMI 系统和 Windows COM 子系统。

MOF 文件可以包含相同类的多个类型的提供程序。 相同的提供程序名称注册为,例如实例或方法提供程序。 有关详细信息,请参阅 注册提供程序

测试提供程序

注册提供程序代码后,必须使用不同的使用者 (例如,脚本、.NET 托管代码和 c + + 使用者) 正确测试提供程序,这一点很重要。

执行以下任务来测试提供程序:

  • 通过跟踪 MSFT _ WmiProvider _ OperationEvent 事件通知,确保提供程序已正确加载。 这些事件将通知你任何提供程序加载失败。 其他可能有用的故障排除类是 win32 _ ProcessStartTracewin32 _ ProcessStopTrace。 有关解决提供程序问题的详细信息,请参阅 调试提供 程序和 提供程序配置和故障排除类
  • 如果提供程序是实例或方法提供程序,请确保逐个测试每个提供程序功能,以避免在代码逻辑后面出现混乱。
  • 对于实例提供程序,创建一个客户端应用程序或脚本,用于调用提供程序的每个接口 (枚举、获取、put 和删除) 。 即使提供程序不应实现任何内容,它也应返回 "不受支持" 的消息。 可以在 WMI 返回代码中找到已定义的返回值。
  • 若要确保所需的安全上下文按计划运行,请从非管理员安全上下文中调用提供程序支持的操作。 提供程序必须支持模拟。 如果用户缺少正确的安全凭据,尝试更新数据或执行执行方法的操作,则提供程序应拒绝具有相应错误消息的访问权限。
  • 有关提供程序安全性的详细信息,请参阅 保护提供程序

开发 WMI 提供程序

提供程序托管和安全

通过编写提供程序向 WMI 提供数据

在应用程序中包含提供程序

注册提供程序

WMI 客户端应用程序疑难解答

保护提供程序

在64位平台上获取和提供数据