确定推送或拉取状态

可以将类提供程序建模为推送或拉取提供程序,其指定提供程序预期与 WMI 的交互方式。 拉取提供程序接收来自 WMI 的请求,并通过动态生成数据或从本地缓存检索数据来满足请求。 拉取提供程序还必须实现大量接口。

拉取提供程序动态生成类定义。 通常,拉取提供程序管理的数据会频繁更改,这要求提供程序在应用程序发出请求时动态生成类或从本地缓存中检索类。 拉取提供程序必须实现自己的数据检索、缓存和事件通知机制。 由于大多数提供程序为拉取提供程序,因此除非另有明确说明,否则此文件中的文档假定正在生成拉取提供程序。

相比之下,WMI 使用 WMI 存储库中的数据来处理推送提供程序的所有应用程序请求。 推送提供程序使用的接口方法也较少,因此更易于实现。 推送提供程序使用 WMI 存储库作为托管对象信息的存储区域,并且仅在初始化期间更新该信息。 例如,Microsoft Windows 软件开发工具包 (SDK) 的 WMI 部分中包含的 WDM 类提供程序将建模为推送提供程序。

通过将 WMI 存储库用作存储区域,推送提供程序比拉取提供程序获得以下优势:

  • 提供程序不需要实现本地缓存来存储数据。
  • 提供程序不需要支持数据检索;相反,提供程序可以依赖 WMI 来提供检索支持。
  • 当应用程序请求提供程序提供的数据时,WMI 满足该请求。
  • 提供程序还可以依赖于 WMI 来支持事件通知。

但是,由于推送提供程序仅在初始化期间更新,因此对类的任何更改在一段时间内可能不会反映在 WMI 存储库中。 因此,推送提供程序模型最适合更改很少或完全静态的类。