初始化提供程序

为提供程序编码必须进行的首要任务是初始化过程,这涵盖了提供程序必须执行的任何任务,这些任务使提供程序能够将信息发送到 WMI 并接收来自其的信息、控制托管对象以及执行其他任务。 每种类型的提供程序都有一组必须执行的不同任务,并附带一组唯一接口。

但是,所有提供程序会通过 IWbemProviderInit 接口初始化,并通过 IWbemProviderInitSink 接口通知 WMI 其初始化状态。

以下过程介绍如何初始化提供程序。

初始化提供程序

  1. 为提供程序实现 IWbemProviderInit::Initialize

    当 WMI 确定客户端需要提供程序的服务时,WMI 会通过调用 IWbemProviderInit::Initialize 方法加载提供程序。

  2. 实现针对提供程序类型唯一的任何接口。

  3. 通过调用 IWbemProviderInitSink::SetStatus 告知 WMI 提供程序已完成初始化。

    IWbemProviderInit::Initialize 的所有实现必须调用 IWbemProviderInitSink::SetStatus 才能向 WMI 报告初始化状态。 SetStatus 方法允许 WMI 确定提供程序是否已准备好接收请求,以及确定提供程序已准备好接收的请求类型。

以下过程介绍如何报告成功的初始化。

报告成功的初始化

  • SetStatus 的 IStatus 参数设置为 WBEM_S_INITIALIZED。

    通过返回 WBEM_S_INITIALIZED,提供程序指示已准备好处理来自应用程序、WMI 和其他提供程序的请求。 收到 WBEM_S_INITIALIZED 后,WMI 会对提供程序上的 IWbemProviderInit::QueryInterface 方法进行调用。 此查询检索指向提供程序的主接口的指针。

以下过程介绍如何报告初始化期间的错误。

报告初始化期间的错误

  • SetStatus 的 IStatus 参数设置为 WBEM_E_FAILED。 WMI 将返回 WBEM_E_FAILED 的提供程序视为不起作用。

    在 WMI 已获取指向提供程序主接口的指针后或在初始化失败后,WMI 会释放 IWbemProviderInit 指针

开发 WMI 提供程序

设置命名空间安全描述符

保护提供程序