WMI 注册标志

驱动程序指示块是使用静态实例名称还是动态实例名称,并通过在 WMIGUIDREGINFOWMIREGGUID 结构中设置标志来指定块的其他特征,该结构传递给 WMI 以注册块。

驱动程序通过设置以下标志之一来指示块使用静态实例名称:

  • WMIREG_FLAG_INSTANCE_LIST指示驱动程序在静态列表中提供所有实例名称。

    仅当驱动程序通过处理 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求(而不是通过调用 WmiSystemControl)来注册块时,才能设置此标志。 驱动程序在块的 WMIREGGUID 结构中 InstanceNameList 指示的字节偏移处写入实例名称字符串。

  • WMIREG_FLAG_INSTANCE_BASENAME指示 WMI 从驱动程序定义的基名称字符串生成静态实例名称。

    处理IRP_MN_REGINFOIRP_MN_REGINFO_EX请求的驱动程序在块的 WMIREGGUID 结构中 BaseNameOffset 指示的偏移量处写入基名称字符串。

    调用 WmiSystemControl 的驱动程序在其 DpWmiQueryReginfo 例程的 InstanceName 参数中指定基名称字符串。

  • WMIREG_FLAG_INSTANCE_PDO指示 WMI 从驱动程序 PDO 的设备实例 ID 生成静态实例名称。

    处理IRP_MN_REGINFOIRP_MN_REGINFO_EX请求的驱动程序会将指向 PDO 的指针写入块的 WMIREGGUID 结构的 Pdo 成员处。 如果 请求IRP_MN_REGINFO_EX,驱动程序必须通过调用 ObReferenceObject 例程来增加每个 PDO 的引用计数。 (系统将稍后取消引用每个 PDO。)

    调用 WmiSystemControl 的驱动程序在其 DpWmiQueryReginfo 例程的 Pdo 参数中写入指向 PDO 的指针。

若要指示块使用动态实例名称,驱动程序不得设置以下任何标志:WMIREG_FLAG_INSTANCE_LIST、WMIREG_FLAG_INSTANCE_PDO或WMIREG_FLAG_INSTANCE_BASENAME。

驱动程序指示通过设置WMIREG_FLAG_EXPENSIVE来收集数据块的成本很高。 这会指示 WMI 在 WMI 客户端首次打开数据块时发送 IRP_MN_ENABLE_COLLECTION 请求,并在最后一个 WMI 客户端关闭数据块时发送 IRP_MN_DISABLE_COLLECTION 请求。 驱动程序在收到 IRP_MN_ENABLE_COLLECTION 请求之前,不需要收集此类块的数据。

驱动程序通过设置 WMIREG_FLAG_EVENT_ONLY_GUID 来指示事件块。 这表示块只能作为事件启用或禁用,并且不能查询或设置。

驱动程序通过设置 WMIREG_FLAG_REMOVE_GUID 指示 WMI 删除以前注册的块。 此标志仅在响应使用 WMIUPDATE) (IRP_MN_REGINFOIRP_MN_REGINFO_EX 更新注册信息的请求时有效。 有关详细信息,请参阅 更新 WMI 注册信息