master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5#ifndef _WMISTR_
  6#define _WMISTR_
  7
  8typedef struct _WNODE_HEADER {
  9  ULONG BufferSize;
 10  ULONG ProviderId;
 11  __C89_NAMELESS union {
 12    ULONG64 HistoricalContext;
 13    __C89_NAMELESS struct {
 14      ULONG Version;
 15      ULONG Linkage;
 16    };
 17  };
 18  __C89_NAMELESS union {
 19    ULONG CountLost;
 20    HANDLE KernelHandle;
 21    LARGE_INTEGER TimeStamp;
 22  };
 23  GUID Guid;
 24  ULONG ClientContext;
 25  ULONG Flags;
 26} WNODE_HEADER,*PWNODE_HEADER;
 27
 28#define WNODE_FLAG_ALL_DATA 0x00000001
 29#define WNODE_FLAG_SINGLE_INSTANCE 0x00000002
 30#define WNODE_FLAG_SINGLE_ITEM 0x00000004
 31#define WNODE_FLAG_EVENT_ITEM 0x00000008
 32#define WNODE_FLAG_FIXED_INSTANCE_SIZE 0x00000010
 33#define WNODE_FLAG_TOO_SMALL 0x00000020
 34#define WNODE_FLAG_INSTANCES_SAME 0x00000040
 35#define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080
 36#define WNODE_FLAG_INTERNAL 0x00000100
 37#define WNODE_FLAG_USE_TIMESTAMP 0x00000200
 38#define WNODE_FLAG_PERSIST_EVENT 0x00000400
 39#define WNODE_FLAG_EVENT_REFERENCE 0x00002000
 40#define WNODE_FLAG_ANSI_INSTANCENAMES 0x00004000
 41#define WNODE_FLAG_METHOD_ITEM 0x00008000
 42#define WNODE_FLAG_PDO_INSTANCE_NAMES 0x00010000
 43#define WNODE_FLAG_TRACED_GUID 0x00020000
 44#define WNODE_FLAG_LOG_WNODE 0x00040000
 45#define WNODE_FLAG_USE_GUID_PTR 0x00080000
 46#define WNODE_FLAG_USE_MOF_PTR 0x00100000
 47#define WNODE_FLAG_NO_HEADER 0x00200000
 48#if NTDDI_VERSION >= 0x06000000
 49#define WNODE_FLAG_SEND_DATA_BLOCK 0x00400000
 50#endif
 51#define WNODE_FLAG_VERSIONED_PROPERTIES 0x00800000
 52#define WNODE_FLAG_SEVERITY_MASK 0xff000000
 53
 54typedef struct {
 55  ULONG OffsetInstanceData;
 56  ULONG LengthInstanceData;
 57} OFFSETINSTANCEDATAANDLENGTH,*POFFSETINSTANCEDATAANDLENGTH;
 58
 59typedef struct tagWNODE_ALL_DATA {
 60  struct _WNODE_HEADER WnodeHeader;
 61  ULONG DataBlockOffset;
 62  ULONG InstanceCount;
 63  ULONG OffsetInstanceNameOffsets;
 64  __C89_NAMELESS union {
 65    ULONG FixedInstanceSize;
 66    OFFSETINSTANCEDATAANDLENGTH OffsetInstanceDataAndLength[1];
 67  };
 68} WNODE_ALL_DATA,*PWNODE_ALL_DATA;
 69
 70typedef struct tagWNODE_SINGLE_INSTANCE {
 71  struct _WNODE_HEADER WnodeHeader;
 72  ULONG OffsetInstanceName;
 73  ULONG InstanceIndex;
 74  ULONG DataBlockOffset;
 75  ULONG SizeDataBlock;
 76  UCHAR VariableData[];
 77} WNODE_SINGLE_INSTANCE,*PWNODE_SINGLE_INSTANCE;
 78
 79typedef struct tagWNODE_SINGLE_ITEM {
 80  struct _WNODE_HEADER WnodeHeader;
 81  ULONG OffsetInstanceName;
 82  ULONG InstanceIndex;
 83  ULONG ItemId;
 84  ULONG DataBlockOffset;
 85  ULONG SizeDataItem;
 86  UCHAR VariableData[];
 87} WNODE_SINGLE_ITEM,*PWNODE_SINGLE_ITEM;
 88
 89typedef struct tagWNODE_METHOD_ITEM {
 90  struct _WNODE_HEADER WnodeHeader;
 91  ULONG OffsetInstanceName;
 92  ULONG InstanceIndex;
 93  ULONG MethodId;
 94  ULONG DataBlockOffset;
 95  ULONG SizeDataBlock;
 96  UCHAR VariableData[];
 97} WNODE_METHOD_ITEM,*PWNODE_METHOD_ITEM;
 98
 99typedef struct tagWNODE_EVENT_ITEM {
100  struct _WNODE_HEADER WnodeHeader;
101} WNODE_EVENT_ITEM,*PWNODE_EVENT_ITEM;
102
103typedef struct tagWNODE_EVENT_REFERENCE {
104  struct _WNODE_HEADER WnodeHeader;
105  GUID TargetGuid;
106  ULONG TargetDataBlockSize;
107  __C89_NAMELESS union {
108    ULONG TargetInstanceIndex;
109    WCHAR TargetInstanceName[1];
110  };
111} WNODE_EVENT_REFERENCE,*PWNODE_EVENT_REFERENCE;
112
113typedef struct tagWNODE_TOO_SMALL {
114  struct _WNODE_HEADER WnodeHeader;
115  ULONG SizeNeeded;
116} WNODE_TOO_SMALL,*PWNODE_TOO_SMALL;
117
118typedef struct {
119  GUID Guid;
120  ULONG Flags;
121  ULONG InstanceCount;
122  __C89_NAMELESS union {
123    ULONG InstanceNameList;
124    ULONG BaseNameOffset;
125    ULONG_PTR Pdo;
126    ULONG_PTR InstanceInfo;
127  };
128} WMIREGGUIDW,*PWMIREGGUIDW;
129
130typedef WMIREGGUIDW WMIREGGUID;
131typedef PWMIREGGUIDW PWMIREGGUID;
132
133#define WMIREG_FLAG_EXPENSIVE 0x00000001
134#define WMIREG_FLAG_INSTANCE_LIST 0x00000004
135#define WMIREG_FLAG_INSTANCE_BASENAME 0x00000008
136#define WMIREG_FLAG_INSTANCE_PDO 0x00000020
137#define WMIREG_FLAG_REMOVE_GUID 0x00010000
138#define WMIREG_FLAG_RESERVED1 0x00020000
139#define WMIREG_FLAG_RESERVED2 0x00040000
140#define WMIREG_FLAG_TRACED_GUID 0x00080000
141#define WMIREG_FLAG_TRACE_CONTROL_GUID 0x00001000
142#define WMIREG_FLAG_EVENT_ONLY_GUID 0x00000040
143
144typedef struct {
145  ULONG BufferSize;
146  ULONG NextWmiRegInfo;
147  ULONG RegistryPath;
148  ULONG MofResourceName;
149  ULONG GuidCount;
150  WMIREGGUIDW WmiRegGuid[];
151} WMIREGINFOW,*PWMIREGINFOW;
152
153typedef WMIREGINFOW WMIREGINFO;
154typedef PWMIREGINFOW PWMIREGINFO;
155
156typedef enum {
157  WMI_GET_ALL_DATA = 0,WMI_GET_SINGLE_INSTANCE = 1,WMI_SET_SINGLE_INSTANCE = 2,WMI_SET_SINGLE_ITEM = 3,WMI_ENABLE_EVENTS = 4,WMI_DISABLE_EVENTS = 5,
158  WMI_ENABLE_COLLECTION = 6,WMI_DISABLE_COLLECTION = 7,WMI_REGINFO = 8,WMI_EXECUTE_METHOD = 9,
159  WMI_CAPTURE_STATE = 10
160} WMIDPREQUESTCODE;
161
162#if defined(_WINNT_) || defined(WINNT)
163
164#define WMI_GUIDTYPE_TRACECONTROL 0
165#define WMI_GUIDTYPE_TRACE 1
166#define WMI_GUIDTYPE_DATA 2
167#define WMI_GUIDTYPE_EVENT 3
168
169#define WMIGUID_QUERY 0x0001
170#define WMIGUID_SET 0x0002
171#define WMIGUID_NOTIFICATION 0x0004
172#define WMIGUID_READ_DESCRIPTION 0x0008
173#define WMIGUID_EXECUTE 0x0010
174#define TRACELOG_CREATE_REALTIME 0x0020
175#define TRACELOG_CREATE_ONDISK 0x0040
176#define TRACELOG_GUID_ENABLE 0x0080
177#define TRACELOG_ACCESS_KERNEL_LOGGER 0x0100
178#define TRACELOG_CREATE_INPROC 0x0200
179#define TRACELOG_LOG_EVENT 0x0200
180#define TRACELOG_ACCESS_REALTIME 0x0400
181#define TRACELOG_REGISTER_GUIDS 0x0800
182#define TRACELOG_JOIN_GROUP 0x1000
183
184#define WMIGUID_ALL_ACCESS_WIN2K (STANDARD_RIGHTS_READ | WMIGUID_QUERY | WMIGUID_SET | WMIGUID_NOTIFICATION | WMIGUID_READ_DESCRIPTION | WMIGUID_EXECUTE | TRACELOG_CREATE_REALTIME | TRACELOG_CREATE_ONDISK | TRACELOG_GUID_ENABLE | TRACELOG_ACCESS_KERNEL_LOGGER | TRACELOG_CREATE_INPROC | TRACELOG_ACCESS_REALTIME)
185#define WMIGUID_ALL_ACCESS_WINXP (WMIGUID_ALL_ACCESS_WIN2K | SYNCHRONIZE | TRACELOG_REGISTER_GUIDS)
186#define WMIGUID_ALL_ACCESS_RS1 (WMIGUID_ALL_ACCESS_WINXP | TRACELOG_JOIN_GROUP)
187
188#if (NTDDI_VERSION >= 0x0A000002)
189#define WMIGUID_ALL_ACCESS WMIGUID_ALL_ACCESS_RS1
190#elif (NTDDI_VERSION >= 0x05010000)
191#define WMIGUID_ALL_ACCESS WMIGUID_ALL_ACCESS_WINXP
192#else
193#define WMIGUID_ALL_ACCESS WMIGUID_ALL_ACCESS_WIN2K
194#endif
195
196#define WMI_GLOBAL_LOGGER_ID 0x0001
197#endif
198#endif