使用 WMI 库注册块

如果驱动程序注册的块不使用动态实例名称,或者使用基于 PDO 或驱动程序定义的基名称字符串的静态实例名称,则驱动程序可以使用 WMI 库来处理 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。 在这种情况下,驱动程序:

  1. 使用指向驱动程序的设备对象的指针、指向WMILIB_CONTEXT结构的指针和指向 IRP 的指针调用 WmiSystemControl

    WMILIB_CONTEXT 结构指示 (GuidCount) 注册的块数,并指向指定 GUID、实例数以及与相应块相关的注册标志 (GuidList) WMIGUIDREGINFO 结构的列表。 它还为驱动程序的必需和可选的 DpWmiXxx 回调例程定义入口点。

  2. 当 WMI 调用驱动程序的 DpWmiQueryReginfo 例程时,驱动程序将指定驱动程序的注册表路径、其 MOF 资源名称、与其所有块相关的注册标志,以及 WMI 用于命名驱动程序数据块实例的信息,该数据块可以是指向传递给驱动程序 AddDevice 例程的物理设备对象的指针,也可以是静态实例名称的基础字符串。

在调用 WmiSystemControl 之前,驱动程序必须在 WMILIB_CONTEXT 结构中初始化其 DpWmiXxx 回调例程的入口点,但可以推迟WMILIB_CONTEXT结构中 GuidCountGuidList 的初始化,直到 WMI 调用驱动程序的 DpWmiQueryReginfo 例程。