1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use shared::basetsd::{ULONG64, ULONG_PTR};
7 use shared::guiddef::GUID;
8 use shared::minwindef::{UCHAR, ULONG};
9 use um::winnt::{HANDLE, LARGE_INTEGER, STANDARD_RIGHTS_READ, SYNCHRONIZE, WCHAR};
10 STRUCT!{struct WNODE_HEADER_u1_s {
11     Version: ULONG,
12     Linkage: ULONG,
13 }}
14 UNION!{union WNODE_HEADER_u1 {
15     [u64; 1],
16     HistoricalContext HistoricalContext_mut: ULONG64,
17     s s_mut: WNODE_HEADER_u1_s,
18 }}
19 UNION!{union WNODE_HEADER_u2 {
20     [u64; 1],
21     CountLost CountLost_mut: ULONG,
22     KernelHandle KernelHandle_mut: HANDLE,
23     TimeStamp TimeStamp_mut: LARGE_INTEGER,
24 }}
25 STRUCT!{struct WNODE_HEADER {
26     BufferSize: ULONG,
27     ProviderId: ULONG,
28     u1: WNODE_HEADER_u1,
29     u2: WNODE_HEADER_u2,
30     Guid: GUID,
31     ClientContext: ULONG,
32     Flags: ULONG,
33 }}
34 pub type PWNODE_HEADER = *mut WNODE_HEADER;
35 pub const WNODE_FLAG_ALL_DATA: ULONG = 0x00000001;
36 pub const WNODE_FLAG_SINGLE_INSTANCE: ULONG = 0x00000002;
37 pub const WNODE_FLAG_SINGLE_ITEM: ULONG = 0x00000004;
38 pub const WNODE_FLAG_EVENT_ITEM: ULONG = 0x00000008;
39 pub const WNODE_FLAG_FIXED_INSTANCE_SIZE: ULONG = 0x00000010;
40 pub const WNODE_FLAG_TOO_SMALL: ULONG = 0x00000020;
41 pub const WNODE_FLAG_INSTANCES_SAME: ULONG = 0x00000040;
42 pub const WNODE_FLAG_STATIC_INSTANCE_NAMES: ULONG = 0x00000080;
43 pub const WNODE_FLAG_INTERNAL: ULONG = 0x00000100;
44 pub const WNODE_FLAG_USE_TIMESTAMP: ULONG = 0x00000200;
45 pub const WNODE_FLAG_PERSIST_EVENT: ULONG = 0x00000400;
46 pub const WNODE_FLAG_EVENT_REFERENCE: ULONG = 0x00002000;
47 pub const WNODE_FLAG_ANSI_INSTANCENAMES: ULONG = 0x00004000;
48 pub const WNODE_FLAG_METHOD_ITEM: ULONG = 0x00008000;
49 pub const WNODE_FLAG_PDO_INSTANCE_NAMES: ULONG = 0x00010000;
50 pub const WNODE_FLAG_TRACED_GUID: ULONG = 0x00020000;
51 pub const WNODE_FLAG_LOG_WNODE: ULONG = 0x00040000;
52 pub const WNODE_FLAG_USE_GUID_PTR: ULONG = 0x00080000;
53 pub const WNODE_FLAG_USE_MOF_PTR: ULONG = 0x00100000;
54 pub const WNODE_FLAG_NO_HEADER: ULONG = 0x00200000;
55 pub const WNODE_FLAG_SEND_DATA_BLOCK: ULONG = 0x00400000;
56 pub const WNODE_FLAG_VERSIONED_PROPERTIES: ULONG = 0x00800000;
57 pub const WNODE_FLAG_SEVERITY_MASK: ULONG = 0xff000000;
58 STRUCT!{struct OFFSETINSTANCEDATAANDLENGTH {
59     OffsetInstanceData: ULONG,
60     LengthInstanceData: ULONG,
61 }}
62 pub type POFFSETINSTANCEDATAANDLENGTH = *mut OFFSETINSTANCEDATAANDLENGTH;
63 UNION!{union WNODE_ALL_DATA_u {
64     [u32; 2],
65     FixedInstanceSize FixedInstanceSize_mut: ULONG,
66     OffsetInstanceDataAndLength OffsetInstanceDataAndLength_mut:
67         [OFFSETINSTANCEDATAANDLENGTH; 0],
68 }}
69 STRUCT!{struct WNODE_ALL_DATA {
70     WnodeHeader: WNODE_HEADER,
71     DataBlockOffset: ULONG,
72     InstanceCount: ULONG,
73     OffsetInstanceNameOffsets: ULONG,
74     u: WNODE_ALL_DATA_u,
75 }}
76 pub type PWNODE_ALL_DATA = *mut WNODE_ALL_DATA;
77 STRUCT!{struct WNODE_SINGLE_INSTANCE {
78     WnodeHeader: WNODE_HEADER,
79     OffsetInstanceName: ULONG,
80     InstanceIndex: ULONG,
81     DataBlockOffset: ULONG,
82     SizeDataBlock: ULONG,
83     VariableData: [UCHAR; 0],
84 }}
85 pub type PWNODE_SINGLE_INSTANCE = *mut WNODE_SINGLE_INSTANCE;
86 STRUCT!{struct WNODE_SINGLE_ITEM {
87     WnodeHeader: WNODE_HEADER,
88     OffsetInstanceName: ULONG,
89     InstanceIndex: ULONG,
90     ItemId: ULONG,
91     DataBlockOffset: ULONG,
92     SizeDataItem: ULONG,
93     VariableData: [UCHAR; 0],
94 }}
95 pub type PWNODE_SINGLE_ITEM = *mut WNODE_SINGLE_ITEM;
96 STRUCT!{struct WNODE_METHOD_ITEM {
97     WnodeHeader: WNODE_HEADER,
98     OffsetInstanceName: ULONG,
99     InstanceIndex: ULONG,
100     MethodId: ULONG,
101     DataBlockOffset: ULONG,
102     SizeDataBlock: ULONG,
103     VariableData: [UCHAR; 0],
104 }}
105 pub type PWNODE_METHOD_ITEM = *mut WNODE_METHOD_ITEM;
106 STRUCT!{struct WNODE_EVENT_ITEM {
107     WnodeHeader: WNODE_HEADER,
108 }}
109 pub type PWNODE_EVENT_ITEM = *mut WNODE_EVENT_ITEM;
110 UNION!{union WNODE_EVENT_REFERENCE_u {
111     [u32; 1],
112     TargetInstanceIndex TargetInstanceIndex_mut: ULONG,
113     TargetInstanceName TargetInstanceName_mut: [WCHAR; 0],
114 }}
115 STRUCT!{struct WNODE_EVENT_REFERENCE {
116     WnodeHeader: WNODE_HEADER,
117     TargetGuid: GUID,
118     TargetDataBlockSize: ULONG,
119     u: WNODE_EVENT_REFERENCE_u,
120 }}
121 pub type PWNODE_EVENT_REFERENCE = *mut WNODE_EVENT_REFERENCE;
122 STRUCT!{struct WNODE_TOO_SMALL {
123     WnodeHeader: WNODE_HEADER,
124     SizeNeeded: ULONG,
125 }}
126 pub type PWNODE_TOO_SMALL = *mut WNODE_TOO_SMALL;
127 UNION!{union WMIREGGUIDW_u {
128     [usize; 1],
129     InstanceNameList InstanceNameList_mut: ULONG,
130     BaseNameOffset BaseNameOffset_mut: ULONG,
131     Pdo Pdo_mut: ULONG_PTR,
132     InstanceInfo InstanceInfo_mut: ULONG_PTR,
133 }}
134 STRUCT!{struct WMIREGGUIDW {
135     Guid: GUID,
136     Flags: ULONG,
137     InstanceCount: ULONG,
138     u: WMIREGGUIDW_u,
139 }}
140 pub type PWMIREGGUIDW = *mut WMIREGGUIDW;
141 pub const WMIREG_FLAG_EXPENSIVE: ULONG = 0x00000001;
142 pub const WMIREG_FLAG_INSTANCE_LIST: ULONG = 0x00000004;
143 pub const WMIREG_FLAG_INSTANCE_BASENAME: ULONG = 0x00000008;
144 pub const WMIREG_FLAG_INSTANCE_PDO: ULONG = 0x00000020;
145 pub const WMIREG_FLAG_REMOVE_GUID: ULONG = 0x00010000;
146 pub const WMIREG_FLAG_RESERVED1: ULONG = 0x00020000;
147 pub const WMIREG_FLAG_RESERVED2: ULONG = 0x00040000;
148 pub const WMIREG_FLAG_TRACED_GUID: ULONG = 0x00080000;
149 pub const WMIREG_FLAG_TRACE_CONTROL_GUID: ULONG = 0x00001000;
150 pub const WMIREG_FLAG_EVENT_ONLY_GUID: ULONG = 0x00000040;
151 STRUCT!{struct WMIREGINFOW {
152     BufferSize: ULONG,
153     NextWmiRegInfo: ULONG,
154     RegistryPath: ULONG,
155     MofResourceName: ULONG,
156     GuidGount: ULONG,
157     WmiRegGuid: [WMIREGGUIDW; 0],
158 }}
159 pub type PWMIREGINFOW = *mut WMIREGINFOW;
160 ENUM!{enum WMIDPREQUESTCODE {
161     WMI_GET_ALL_DATA = 0,
162     WMI_GET_SINGLE_INSTANCE = 1,
163     WMI_SET_SINGLE_INSTANCE = 2,
164     WMI_SET_SINGLE_ITEM = 3,
165     WMI_ENABLE_EVENTS = 4,
166     WMI_DISABLE_EVENTS = 5,
167     WMI_ENABLE_COLLECTION = 6,
168     WMI_DISABLE_COLLECTION = 7,
169     WMI_REGINFO = 8,
170     WMI_EXECUTE_METHOD = 9,
171     WMI_CAPTURE_STATE = 10,
172 }}
173 pub const WMI_GUIDTYPE_TRACECONTROL: ULONG = 0;
174 pub const WMI_GUIDTYPE_TRACE: ULONG = 1;
175 pub const WMI_GUIDTYPE_DATA: ULONG = 2;
176 pub const WMI_GUIDTYPE_EVENT: ULONG = 3;
177 pub const WMIGUID_QUERY: ULONG = 0x0001;
178 pub const WMIGUID_SET: ULONG = 0x0002;
179 pub const WMIGUID_NOTIFICATION: ULONG = 0x0004;
180 pub const WMIGUID_READ_DESCRIPTION: ULONG = 0x0008;
181 pub const WMIGUID_EXECUTE: ULONG = 0x0010;
182 pub const TRACELOG_CREATE_REALTIME: ULONG = 0x0020;
183 pub const TRACELOG_CREATE_ONDISK: ULONG = 0x0040;
184 pub const TRACELOG_GUID_ENABLE: ULONG = 0x0080;
185 pub const TRACELOG_ACCESS_KERNEL_LOGGER: ULONG = 0x0100;
186 pub const TRACELOG_LOG_EVENT: ULONG = 0x0200;
187 pub const TRACELOG_CREATE_INPROC: ULONG = 0x0200;
188 pub const TRACELOG_ACCESS_REALTIME: ULONG = 0x0400;
189 pub const TRACELOG_REGISTER_GUIDS: ULONG = 0x0800;
190 pub const TRACELOG_JOIN_GROUP: ULONG = 0x1000;
191 pub const WMIGUID_ALL_ACCESS_WIN2K: ULONG = STANDARD_RIGHTS_READ | WMIGUID_QUERY | WMIGUID_SET
192     | WMIGUID_NOTIFICATION | WMIGUID_READ_DESCRIPTION | WMIGUID_EXECUTE | TRACELOG_CREATE_REALTIME
193     | TRACELOG_CREATE_ONDISK | TRACELOG_GUID_ENABLE | TRACELOG_ACCESS_KERNEL_LOGGER
194     | TRACELOG_CREATE_INPROC | TRACELOG_ACCESS_REALTIME;
195 pub const WMIGUID_ALL_ACCESS_WINXP: ULONG = WMIGUID_ALL_ACCESS_WIN2K | SYNCHRONIZE
196     | TRACELOG_REGISTER_GUIDS;
197 pub const WMIGUID_ALL_ACCESS_RS1: ULONG = WMIGUID_ALL_ACCESS_WINXP | TRACELOG_JOIN_GROUP;
198 pub const WMIGUID_ALL_ACCESS: ULONG = WMIGUID_ALL_ACCESS_RS1;
199 pub const WMI_GLOBAL_LOGGER_ID: ULONG = 0x0001;
200