WNODE_ALL_DATA结构(wmistr.h)
WNODE_ALL_DATA 结构包含数据块或事件块的所有实例的数据。
语法
typedef struct tagWNODE_ALL_DATA {
struct _WNODE_HEADER WnodeHeader;
ULONG DataBlockOffset;
ULONG InstanceCount;
ULONG OffsetInstanceNameOffsets;
union {
ULONG FixedInstanceSize;
OFFSETINSTANCEDATAANDLENGTH OffsetInstanceDataAndLength[];
} DUMMYUNIONNAME;
} WNODE_ALL_DATA, *PWNODE_ALL_DATA;
成员
WnodeHeader
指定一个 WNODE_HEADER 结构,该结构包含所有 WNODE_XXX 结构共有的信息,例如缓冲区大小、表示与请求关联的数据块的 GUID,以及提供有关要传递或返回 WNODE_XXX 数据的信息的标志。
DataBlockOffset
指示从 WNODE_ALL_DATA 结构的开头到第一个实例数据的开头的偏移量(以字节为单位)。
InstanceCount
指示其数据遵循 IrpStack->Parameters.WMI.Buffer缓冲区中 WNODE_ALL_DATA 固定成员的实例数。
OffsetInstanceNameOffsets
指示从 WNODE_ALL_DATA 开头到动态实例名称偏移数组的偏移量(以字节为单位)。 每个实例名称必须在 USHORT 边界上对齐。 如果要返回的所有实例都具有静态实例名称,WMI 将忽略 OffsetInstanceNameOffsets。
DUMMYUNIONNAME
DUMMYUNIONNAME.FixedInstanceSize
指示如果所有此类实例的大小都相同,则指示要返回的每个实例的大小。 仅当驱动程序在 WnodeHeader.Flags中设置WNODE_FLAG_FIXED_INSTANCE_SIZE时,此成员才有效。
DUMMYUNIONNAME.OffsetInstanceDataAndLength
如果要返回的实例的大小不同,OffsetInstanceDataAndLength 是 InstanceCount OFFSETINSTANCEDATAANDLENGTH 结构数组,用于指定从 WNODE_ALL_DATA 开头到每个实例的开头及其长度的偏移量(以字节为单位)。 OFFSETINSTANCEDATAANDLENGTH 的定义如下:
typedef struct {
ULONG OffsetInstanceData;
ULONG LengthInstanceData;
} OFFSETINSTANCEDATAANDLENGTH, *POFFSETINSTANCEDATAANDLENGTH;
每个实例必须在 USHORT 边界上对齐。 仅当驱动程序清除 WnodeHeader.Flags中的WNODE_FLAG_FIXED_INSTANCE_SIZE时,OffsetInstanceDataAndLength 成员才有效。
言论
驱动程序在响应 IRP_MN_QUERY_ALL_DATA 请求时填充 WNODE_ALL_DATA 结构。 驱动程序也可能生成 WNODE_ALL_DATA 作为事件。
在填充结构的固定成员后,驱动程序在 DataBlockOffset 和 OffsetInstanceNameOffsets分别在 IrpStack->Parameters.WMI.Buffer 的缓冲区中写入实例数据和动态实例名称(如果有)。 如果WNODE_FLAG_FIXED_INSTANCE_SIZE清楚,则第一个偏移量遵循 OffsetInstanceDataAndLength 数组的最后一个元素,加上填充,以便数据在 8 字节边界上开始。
实例名称必须保持 USHORT 对齐。 实例数据必须对齐 QUADWORD。
要求
要求 | 价值 |
---|---|
标头 | wmistr.h (包括 Wmistr.h) |