WMIREGGUIDW 结构 (wmistr.h)

WMIREGGUID 结构包含数据块或事件块的新注册或更新的注册信息。

语法

typedef struct {
  GUID  Guid;
  ULONG Flags;
  ULONG InstanceCount;
  union {
    ULONG     InstanceNameList;
    ULONG     BaseNameOffset;
    ULONG_PTR Pdo;
    ULONG_PTR InstanceInfo;
  } DUMMYUNIONNAME;
} WMIREGGUIDW, *PWMIREGGUIDW;

成员

Guid

指定表示要注册或更新的块的 GUID。

Flags

指示要注册或更新的块的特征。

如果使用静态实例名称注册块,驱动程序将设置以下标志之一:

WMIREG_FLAG_INSTANCE_LIST

指示驱动程序在 IrpStack-Parameters.WMI.Buffer> 的缓冲区中遵循 WMIREGINFO 结构的静态列表中为此块提供静态实例名称。 如果设置了此标志,则 InstanceNameList 是从包含此 WMIREGGUIDWMIREGINFO 结构开头到一系列连续的 InstanceCount 计数 Unicode 字符串的偏移量(以字节为单位)。

WMIREG_FLAG_INSTANCE_BASENAME

请求 WMI 根据 IrpStack-Parameters.WMI.Buffer> 缓冲区中的 WMIREGINFO 结构中的驱动程序提供的基名称生成静态实例名称。 WMI 通过将计数器追加到基名称来生成实例名称。 如果设置了此标志,则 BaseNameOffset 是从包含此 WMIREGGUIDWMIREGINFO 结构开头到用作基名称的单个计数 Unicode 字符串的偏移量(以字节为单位)。

WMIREG_FLAG_INSTANCE_PDO

请求 WMI 从 PDO 的设备实例 ID 生成静态实例名称。 如果设置了此标志, InstanceInfo 将指向传递给驱动程序的 AddDevice 例程的 PDO。 WMI 从 PDO 的设备实例路径生成实例名称。 使用设备实例路径作为静态实例名称的基础是有效的,因为此类名称保证是唯一的。 WMI 自动为实例提供一个“友好”名称,作为数据块中的项,数据使用者可以查询该名称。

如果使用动态实例名称注册块,则必须清除WMIREG_FLAG_INSTANCE_LIST、WMIREG_FLAG_INSTANCE_BASENAME和WMIREG_FLAG_INSTANCE_PDO。

驱动程序还可以设置以下一个或多个标志:

WMIREG_FLAG_EVENT_ONLY_GUID

块只能作为事件启用或禁用,不能查询或设置。 如果此标志是明确的,则还可以查询或设置块。

WMIREG_FLAG_EXPENSIVE

请求 WMI 在数据使用者首次打开数据块时发送 IRP_MN_ENABLE_COLLECTION 请求,并在最后一个数据使用者关闭数据块时 发送IRP_MN_DISABLE_COLLECTION 请求。 如果收集此类数据会影响性能,建议执行此操作,因为驱动程序不需要收集数据,直到数据使用者通过打开块显式请求数据。

WMIREG_FLAG_REMOVE_GUID

请求 WMI 删除对此块的支持。 此标志仅在响应将 Parameters.WMI.DataPath 设置为 WMIUPDATE ) 的情况下更新注册信息 (IRP_MN_REGINFO或IRP_MN_REGINFO_EX的请求时有效。

WMIREG_FLAG_TRACED_GUID

块只能写入日志文件,并且只能通过 evntrace.h 中声明的用户模式例程进行访问。 只有 NT 内核模式数据提供程序设置此标志。

WMIREG_FLAG_TRACE_CONTROL_GUID

GUID 充当控制 GUID,用于在 MOF 文件中启用或禁用与其关联的跟踪 GUID。 仅当同时设置了WMIREG_FLAG_TRACED_GUID时,此标志才有效。 只有 NT 内核模式数据提供程序设置此标志。

InstanceCount

指定要为此块定义的静态实例名称数。 如果块是使用动态实例名称注册的,WMI 将忽略 InstanceCount

DUMMYUNIONNAME

DUMMYUNIONNAME.InstanceNameList

指示从包含此 WMIREGGUIDWMIREGINFO 结构的开头到连续的 InstanceCount 计数 Unicode 字符串系列的偏移量(以字节为单位)。 仅当在 Flags 中设置了WMIREG_FLAG_INSTANCE_LIST时,此成员才有效。 如果块是使用动态实例名称注册的,则 WMI 将忽略 InstanceNameList

DUMMYUNIONNAME.BaseNameOffset

指示从包含此 WMIREGGUIDWMIREGINFO 结构的开头到作为 WMI 生成静态实例名称的基数的单个计数 Unicode 字符串的偏移量(以字节为单位)。 仅当在 Flags 中设置了WMIREG_FLAG_INSTANCE_BASENAME时,此成员才有效。 如果块是使用动态实例名称注册的,则 WMI 将忽略 BaseNameOffset

DUMMYUNIONNAME.Pdo

指向物理设备对象的指针 (PDO) 传递给驱动程序的 AddDevice 例程。 WMI 使用此 PDO 的设备实例路径作为生成静态实例名称的基础。 仅当在 Flags 中设置了WMIREG_FLAG_INSTANCE_PDO时,此成员才有效。 如果块是使用动态实例名称注册的,则 WMI 将忽略 Pdo

DUMMYUNIONNAME.InstanceInfo

保留供 WMI 使用。

注解

驱动程序生成一个或多个 WMIREGGUID 结构,以响应注册或更新其块 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。 驱动程序在 WMIREGINFO 结构的 WmiRegGuid 成员处传递此类结构的数组,驱动程序会将该数组写入 IrpStack-Parameters.WMI.Buffer> 的缓冲区

驱动程序可以使用静态或动态实例名称注册或更新块。 静态实例名称提供最佳性能;但是,如果实例数或实例名称频繁更改,动态实例名称是数据块的首选。 有关实例名称的详细信息,请参阅 定义 WMI 实例名称

要求

要求
Header wmistr.h (包括 Wmistr.h)

另请参阅

IRP_MN_REGINFO

IRP_MN_REGINFO_EX

WMIREGINFO