ULONG Flags;
} WNODE_HEADER, *PWNODE_HEADER;
+#define WNODE_FLAG_ALL_DATA 0x00000001
+#define WNODE_FLAG_SINGLE_INSTANCE 0x00000002
+#define WNODE_FLAG_SINGLE_ITEM 0x00000004
+#define WNODE_FLAG_EVENT_ITEM 0x00000008
+#define WNODE_FLAG_FIXED_INSTANCE_SIZE 0x00000010
+#define WNODE_FLAG_TOO_SMALL 0x00000020
+#define WNODE_FLAG_INSTANCES_SAME 0x00000040
+#define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080
+#define WNODE_FLAG_INTERNAL 0x00000100
+#define WNODE_FLAG_USE_TIMESTAMP 0x00000200
+#define WNODE_FLAG_PERSIST_EVENT 0x00000400
+#define WNODE_FLAG_EVENT_REFERENCE 0x00002000
+#define WNODE_FLAG_ANSI_INSTANCENAMES 0x00004000
+#define WNODE_FLAG_METHOD_ITEM 0x00008000
+#define WNODE_FLAG_PDO_INSTANCE_NAMES 0x00010000
+#define WNODE_FLAG_TRACED_GUID 0x00020000
+#define WNODE_FLAG_LOG_WNODE 0x00040000
+#define WNODE_FLAG_USE_GUID_PTR 0x00080000
+#define WNODE_FLAG_USE_MOF_PTR 0x00100000
+#define WNODE_FLAG_NO_HEADER 0x00200000
+#define WNODE_FLAG_SEVERITY_MASK 0xff000000
+
+typedef struct tagWNODE_TOO_SMALL
+{
+ struct _WNODE_HEADER WnodeHeader;
+ ULONG SizeNeeded;
+} WNODE_TOO_SMALL, *PWNODE_TOO_SMALL;
+
+typedef struct tagWNODE_SINGLE_INSTANCE
+{
+ struct _WNODE_HEADER WnodeHeader;
+ ULONG OffsetInstanceName;
+ ULONG InstanceIndex;
+ ULONG DataBlockOffset;
+ ULONG SizeDataBlock;
+ UCHAR VariableData[];
+} WNODE_SINGLE_INSTANCE, *PWNODE_SINGLE_INSTANCE;
+
+#define WMIREG_FLAG_EXPENSIVE 0x00000001
+#define WMIREG_FLAG_INSTANCE_LIST 0x00000004
+#define WMIREG_FLAG_INSTANCE_BASENAME 0x00000008
+#define WMIREG_FLAG_INSTANCE_PDO 0x00000020
+#define WMIREG_FLAG_REMOVE_GUID 0x00010000
+#define WMIREG_FLAG_RESERVED1 0x00020000
+#define WMIREG_FLAG_RESERVED2 0x00040000
+#define WMIREG_FLAG_TRACED_GUID 0x00080000
+#define WMIREG_FLAG_TRACE_CONTROL_GUID 0x00001000
+#define WMIREG_FLAG_EVENT_ONLY_GUID 0x00000040
+
+typedef struct
+{
+ GUID Guid;
+ ULONG Flags;
+ ULONG InstanceCount;
+ union
+ {
+ ULONG InstanceNameList;
+ ULONG BaseNameOffset;
+ ULONG_PTR Pdo;
+ ULONG_PTR InstanceInfo;
+ };
+} WMIREGGUIDW, *PWMIREGGUIDW;
+
+typedef struct
+{
+ ULONG BufferSize;
+ ULONG NextWmiRegInfo;
+ ULONG RegistryPath;
+ ULONG MofResourceName;
+ ULONG GuidCount;
+ WMIREGGUIDW WmiRegGuid[];
+} WMIREGINFOW, *PWMIREGINFOW;
+
+typedef WMIREGINFOW WMIREGINFO;
+typedef PWMIREGINFOW PWMIREGINFO;
+
+typedef struct
+{
+ ULONG OffsetInstanceData;
+ ULONG LengthInstanceData;
+} OFFSETINSTANCEDATAANDLENGTH, *POFFSETINSTANCEDATAANDLENGTH;
+
+typedef struct tagWNODE_ALL_DATA
+{
+ struct _WNODE_HEADER WnodeHeader;
+ ULONG DataBlockOffset;
+ ULONG InstanceCount;
+ ULONG OffsetInstanceNameOffsets;
+ union
+ {
+ ULONG FixedInstanceSize;
+ OFFSETINSTANCEDATAANDLENGTH OffsetInstanceDataAndLength[0];
+ };
+} WNODE_ALL_DATA, *PWNODE_ALL_DATA;
+
+typedef struct tagWNODE_SINGLE_ITEM
+{
+ struct _WNODE_HEADER WnodeHeader;
+ ULONG OffsetInstanceName;
+ ULONG InstanceIndex;
+ ULONG ItemId;
+ ULONG DataBlockOffset;
+ ULONG SizeDataItem;
+ UCHAR VariableData[];
+} WNODE_SINGLE_ITEM, *PWNODE_SINGLE_ITEM;
+
+typedef struct tagWNODE_METHOD_ITEM
+{
+ struct _WNODE_HEADER WnodeHeader;
+ ULONG OffsetInstanceName;
+ ULONG InstanceIndex;
+ ULONG MethodId;
+ ULONG DataBlockOffset;
+ ULONG SizeDataBlock;
+ UCHAR VariableData[];
+} WNODE_METHOD_ITEM, *PWNODE_METHOD_ITEM;
+
typedef enum
{
WMI_GET_ALL_DATA = 0,