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 成員才有效。
言論
驅動程式會填入 WNODE_ALL_DATA 結構,以回應 IRP_MN_QUERY_ALL_DATA 要求。 驅動程式也可能產生 WNODE_ALL_DATA 作為事件。
在填入結構的固定成員之後,驅動程式會分別在 DataBlockOffset 和 OffsetInstanceNameOffsets,分別寫入 IrpStack->Parameters.WMI.Buffer緩衝區的實例數據和動態實例名稱。 如果WNODE_FLAG_FIXED_INSTANCE_SIZE清楚,第一個位移會遵循 OffsetInstanceDataAndLength 陣列的最後一個專案,加上填補,讓數據開始於8位元組界限上。
實例名稱必須對齊 USHORT。 實例數據必須對齊 QUADWORD。
要求
要求 | 價值 |
---|---|
標頭 | wmistr.h (包括 Wmistr.h) |