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请求的驱动程序在块 WMIREGGUID 结构的 Pdo 成员处写入指向 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来指示事件块。 这表明该块只能通过事件来启用或禁用,无法进行查询或设置。

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