]> git.proxmox.com Git - rustc.git/blob - vendor/winapi/src/um/perflib.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / vendor / winapi / src / um / perflib.rs
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::SIZE_T;
7 use shared::guiddef::{GUID, LPCGUID, LPGUID};
8 use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPVOID, ULONG};
9 use um::minwinbase::SYSTEMTIME;
10 use um::winnt::{HANDLE, LONG, LONGLONG, LPCWSTR, PCWSTR, PHANDLE, PVOID, ULONGLONG};
11 pub const PERF_PROVIDER_USER_MODE: ULONG = 0;
12 pub const PERF_PROVIDER_KERNEL_MODE: ULONG = 1;
13 pub const PERF_PROVIDER_DRIVER: ULONG = 2;
14 pub const PERF_COUNTERSET_FLAG_MULTIPLE: ULONG = 2;
15 pub const PERF_COUNTERSET_FLAG_AGGREGATE: ULONG = 4;
16 pub const PERF_COUNTERSET_FLAG_HISTORY: ULONG = 8;
17 pub const PERF_COUNTERSET_FLAG_INSTANCE: ULONG = 16;
18 pub const PERF_COUNTERSET_SINGLE_INSTANCE: ULONG = 0;
19 pub const PERF_COUNTERSET_MULTI_INSTANCES: ULONG = PERF_COUNTERSET_FLAG_MULTIPLE;
20 pub const PERF_COUNTERSET_SINGLE_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE;
21 pub const PERF_COUNTERSET_MULTI_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE
22 | PERF_COUNTERSET_FLAG_MULTIPLE;
23 pub const PERF_COUNTERSET_SINGLE_AGGREGATE_HISTORY: ULONG = PERF_COUNTERSET_FLAG_HISTORY
24 | PERF_COUNTERSET_SINGLE_AGGREGATE;
25 pub const PERF_COUNTERSET_INSTANCE_AGGREGATE: ULONG = PERF_COUNTERSET_MULTI_AGGREGATE
26 | PERF_COUNTERSET_FLAG_INSTANCE;
27 pub const PERF_AGGREGATE_UNDEFINED: ULONG = 0;
28 pub const PERF_AGGREGATE_TOTAL: ULONG = 1;
29 pub const PERF_AGGREGATE_AVG: ULONG = 2;
30 pub const PERF_AGGREGATE_MIN: ULONG = 3;
31 pub const PERF_AGGREGATE_MAX: ULONG = 4;
32 pub const PERF_ATTRIB_BY_REFERENCE: ULONGLONG = 0x0000000000000001;
33 pub const PERF_ATTRIB_NO_DISPLAYABLE: ULONGLONG = 0x0000000000000002;
34 pub const PERF_ATTRIB_NO_GROUP_SEPARATOR: ULONGLONG = 0x0000000000000004;
35 pub const PERF_ATTRIB_DISPLAY_AS_REAL: ULONGLONG = 0x0000000000000008;
36 pub const PERF_ATTRIB_DISPLAY_AS_HEX: ULONGLONG = 0x0000000000000010;
37 STRUCT!{struct PERF_COUNTERSET_INFO {
38 CounterSetGuid: GUID,
39 ProviderGuid: GUID,
40 NumCounters: ULONG,
41 InstanceType: ULONG,
42 }}
43 pub type PPERF_COUNTERSET_INFO = *mut PERF_COUNTERSET_INFO;
44 STRUCT!{struct PERF_COUNTER_INFO {
45 CounterId: ULONG,
46 Type: ULONG,
47 Attrib: ULONGLONG,
48 Size: ULONG,
49 DetailLevel: ULONG,
50 Scale: LONG,
51 Offset: LONG,
52 }}
53 pub type PPERF_COUNTER_INFO = *mut PERF_COUNTER_INFO;
54 STRUCT!{struct PERF_COUNTERSET_INSTANCE {
55 CounterSetGuid: GUID,
56 dwSize: ULONG,
57 InstanceId: ULONG,
58 InstanceNameOffset: ULONG,
59 InstanceNameSize: ULONG,
60 }}
61 pub type PPERF_COUNTERSET_INSTANCE = *mut PERF_COUNTERSET_INSTANCE;
62 STRUCT!{struct PERF_COUNTER_IDENTITY {
63 CounterSetGuid: GUID,
64 BufferSize: ULONG,
65 CounterId: ULONG,
66 InstanceId: ULONG,
67 MachineOffset: ULONG,
68 NameOffset: ULONG,
69 Reserved: ULONG,
70 }}
71 pub type PPERF_COUNTER_IDENTITY = *mut PERF_COUNTER_IDENTITY;
72 pub const PERF_WILDCARD_COUNTER: ULONG = 0xFFFFFFFF;
73 pub const PERF_WILDCARD_INSTANCE: &'static str = "*";
74 pub const PERF_AGGREGATE_INSTANCE: &'static str = "_Total";
75 pub const PERF_MAX_INSTANCE_NAME: ULONG = 1024;
76 pub const PERF_ADD_COUNTER: ULONG = 1;
77 pub const PERF_REMOVE_COUNTER: ULONG = 2;
78 pub const PERF_ENUM_INSTANCES: ULONG = 3;
79 pub const PERF_COLLECT_START: ULONG = 5;
80 pub const PERF_COLLECT_END: ULONG = 6;
81 pub const PERF_FILTER: ULONG = 9;
82 FN!{stdcall PERFLIBREQUEST(
83 RequestCode: ULONG,
84 Buffer: PVOID,
85 BufferSize: ULONG,
86 ) -> ULONG}
87 FN!{stdcall PERF_MEM_ALLOC(
88 AllocSize: SIZE_T,
89 pContext: LPVOID,
90 ) -> LPVOID}
91 FN!{stdcall PERF_MEM_FREE(
92 pBuffer: LPVOID,
93 pContext: LPVOID,
94 ) -> ()}
95 STRUCT!{struct PERF_PROVIDER_CONTEXT {
96 ContextSize: DWORD,
97 Reserved: DWORD,
98 ControlCallback: PERFLIBREQUEST,
99 MemAllocRoutine: PERF_MEM_ALLOC,
100 MemFreeRoutine: PERF_MEM_FREE,
101 pMemContext: LPVOID,
102 }}
103 pub type PPERF_PROVIDER_CONTEXT = *mut PERF_PROVIDER_CONTEXT;
104 extern "system" {
105 pub fn PerfStartProviderEx(
106 ProviderGuid: LPGUID,
107 ProviderContext: PPERF_PROVIDER_CONTEXT,
108 Provider: PHANDLE,
109 ) -> ULONG;
110 pub fn PerfStartProvider(
111 ProviderGuid: LPGUID,
112 ControlCallback: PERFLIBREQUEST,
113 Provider: PHANDLE,
114 ) -> ULONG;
115 pub fn PerfStopProvider(
116 ProviderHandle: HANDLE,
117 ) -> ULONG;
118 pub fn PerfSetCounterSetInfo(
119 ProviderHandle: HANDLE,
120 Template: PPERF_COUNTERSET_INFO,
121 TemplateSize: ULONG,
122 ) -> ULONG;
123 pub fn PerfCreateInstance(
124 ProviderHandle: HANDLE,
125 CounterSetGuid: LPCGUID,
126 Name: PCWSTR,
127 Id: ULONG,
128 ) -> PPERF_COUNTERSET_INSTANCE;
129 pub fn PerfDeleteInstance(
130 Provider: HANDLE,
131 InstanceBlock: PPERF_COUNTERSET_INSTANCE,
132 ) -> ULONG;
133 pub fn PerfQueryInstance(
134 ProviderHandle: HANDLE,
135 CounterSetGuid: LPCGUID,
136 Name: LPCWSTR,
137 Id: ULONG,
138 ) -> PPERF_COUNTERSET_INSTANCE;
139 pub fn PerfSetCounterRefValue(
140 Provider: HANDLE,
141 Instance: PPERF_COUNTERSET_INSTANCE,
142 CounterId: ULONG,
143 Address: PVOID,
144 ) -> ULONG;
145 pub fn PerfSetULongCounterValue(
146 Provider: HANDLE,
147 Instance: PPERF_COUNTERSET_INSTANCE,
148 CounterId: ULONG,
149 Value: ULONG,
150 ) -> ULONG;
151 pub fn PerfSetULongLongCounterValue(
152 Provider: HANDLE,
153 Instance: PPERF_COUNTERSET_INSTANCE,
154 CounterId: ULONG,
155 Value: ULONGLONG,
156 ) -> ULONG;
157 pub fn PerfIncrementULongCounterValue(
158 Provider: HANDLE,
159 Instance: PPERF_COUNTERSET_INSTANCE,
160 CounterId: ULONG,
161 Value: ULONG,
162 ) -> ULONG;
163 pub fn PerfIncrementULongLongCounterValue(
164 Provider: HANDLE,
165 Instance: PPERF_COUNTERSET_INSTANCE,
166 CounterId: ULONG,
167 Value: ULONGLONG,
168 ) -> ULONG;
169 pub fn PerfDecrementULongCounterValue(
170 Provider: HANDLE,
171 Instance: PPERF_COUNTERSET_INSTANCE,
172 CounterId: ULONG,
173 Value: ULONG,
174 ) -> ULONG;
175 pub fn PerfDecrementULongLongCounterValue(
176 Provider: HANDLE,
177 Instance: PPERF_COUNTERSET_INSTANCE,
178 CounterId: ULONG,
179 Value: ULONGLONG,
180 ) -> ULONG;
181 }
182 STRUCT!{struct PERF_INSTANCE_HEADER {
183 Size: ULONG,
184 InstanceId: ULONG,
185 }}
186 pub type PPERF_INSTANCE_HEADER = *mut PERF_INSTANCE_HEADER;
187 ENUM!{enum PerfRegInfoType {
188 PERF_REG_COUNTERSET_STRUCT = 1,
189 PERF_REG_COUNTER_STRUCT,
190 PERF_REG_COUNTERSET_NAME_STRING,
191 PERF_REG_COUNTERSET_HELP_STRING,
192 PERF_REG_COUNTER_NAME_STRINGS,
193 PERF_REG_COUNTER_HELP_STRINGS,
194 PERF_REG_PROVIDER_NAME,
195 PERF_REG_PROVIDER_GUID,
196 PERF_REG_COUNTERSET_ENGLISH_NAME,
197 PERF_REG_COUNTER_ENGLISH_NAMES,
198 }}
199 STRUCT!{struct PERF_COUNTERSET_REG_INFO {
200 CounterSetGuid: GUID,
201 CounterSetType: ULONG,
202 DetailLevel: ULONG,
203 NumCounters: ULONG,
204 InstanceType: ULONG,
205 }}
206 pub type PPERF_COUNTERSET_REG_INFO = *mut PERF_COUNTERSET_REG_INFO;
207 STRUCT!{struct PERF_COUNTER_REG_INFO {
208 CounterId: ULONG,
209 Type: ULONG,
210 Attrib: ULONGLONG,
211 DetailLevel: ULONG,
212 DefaultScale: LONG,
213 BaseCounterId: ULONG,
214 PerfTimeId: ULONG,
215 PerfFreqId: ULONG,
216 MultiId: ULONG,
217 AggregateFinc: ULONG,
218 Reserved: ULONG,
219 }}
220 pub type PPERF_COUNTER_REG_INFO = *mut PERF_COUNTER_REG_INFO;
221 STRUCT!{struct PERF_STRING_BUFFER_HEADER {
222 dwSize: DWORD,
223 dwCounters: DWORD,
224 }}
225 pub type PPERF_STRING_BUFFER_HEADER = *mut PERF_STRING_BUFFER_HEADER;
226 STRUCT!{struct PERF_STRING_COUNTER_HEADER {
227 dwCounterId: DWORD,
228 dwOffset: DWORD,
229 }}
230 pub type PPERF_STRING_COUNTER_HEADER = *mut PERF_STRING_COUNTER_HEADER;
231 STRUCT!{struct PERF_COUNTER_IDENTIFIER {
232 CounterSetGuid: GUID,
233 Status: ULONG,
234 Size: ULONG,
235 CounterId: ULONG,
236 InstanceId: ULONG,
237 Index: ULONG,
238 Reserved: ULONG,
239 }}
240 pub type PPERF_COUNTER_IDENTIFIER = *mut PERF_COUNTER_IDENTIFIER;
241 STRUCT!{struct PERF_DATA_HEADER {
242 dwTotalSize: ULONG,
243 dwNumCounters: ULONG,
244 PerfTimeStamp: LONGLONG,
245 PerfTime100NSec: LONGLONG,
246 PrefFreq: LONGLONG,
247 SystemTime: SYSTEMTIME,
248 }}
249 pub type PPERF_DATA_HEADER = *mut PERF_DATA_HEADER;
250 ENUM!{enum PerfCounterDataType {
251 PERF_ERROR_RETURN = 0,
252 PERF_SINGLE_COUNTER = 1,
253 PERF_MULTIPLE_COUNTERS = 2,
254 PERF_MULTIPLE_INSTANCES = 4,
255 PERF_COUNTERSET = 6,
256 }}
257 STRUCT!{struct PERF_COUNTER_HEADER {
258 dwStatus: ULONG,
259 dwType: PerfCounterDataType,
260 dwSize: ULONG,
261 Reserved: ULONG,
262 }}
263 pub type PPERF_COUNTER_HEADER = *mut PERF_COUNTER_HEADER;
264 STRUCT!{struct PERF_MULTI_INSTANCES {
265 dwTotalSize: ULONG,
266 dwInstances: ULONG,
267 }}
268 pub type PPERF_MULTI_INSTANCES = *mut PERF_MULTI_INSTANCES;
269 STRUCT!{struct PERF_MULTI_COUNTERS {
270 dwSize: ULONG,
271 dwCounters: ULONG,
272 }}
273 pub type PPERF_MULTI_COUNTERS = *mut PERF_MULTI_COUNTERS;
274 STRUCT!{struct PERF_COUNTER_DATA {
275 dwDataSize: ULONG,
276 dwSize: ULONG,
277 }}
278 pub type PPERF_COUNTER_DATA = *mut PERF_COUNTER_DATA;
279 extern "system" {
280 pub fn PerfEnumerateCounterSet(
281 szMachine: LPCWSTR,
282 pCounterSetIds: LPGUID,
283 cCounterSetIds: DWORD,
284 pcCounterSetIdsActual: LPDWORD,
285 ) -> ULONG;
286 pub fn PerfEnumerateCounterSetInstances(
287 szMachine: LPCWSTR,
288 pCounterSetIds: LPCGUID,
289 pInstances: PPERF_INSTANCE_HEADER,
290 cbInstances: DWORD,
291 pcbInstancesActual: LPDWORD,
292 ) -> ULONG;
293 pub fn PerfQueryCounterSetRegistrationInfo(
294 szMachine: LPCWSTR,
295 pCounterSetId: LPCGUID,
296 requestCode: PerfRegInfoType,
297 requestLangId: DWORD,
298 pbRegInfo: LPBYTE,
299 cbRegInfo: DWORD,
300 pcbRegInfoActual: LPDWORD,
301 ) -> ULONG;
302 pub fn PerfOpenQueryHandle(
303 szMachine: LPCWSTR,
304 hQuery: *mut HANDLE,
305 ) -> ULONG;
306 pub fn PerfCloseQueryHandle(
307 hQuery: HANDLE,
308 ) -> ULONG;
309 pub fn PerfQueryCounterInfo(
310 hQuery: HANDLE,
311 pCounters: PPERF_COUNTER_IDENTIFIER,
312 cbCounters: DWORD,
313 pcbCountersActual: LPDWORD,
314 ) -> ULONG;
315 pub fn PerfQueryCounterData(
316 hQuery: HANDLE,
317 pCounterBlock: PPERF_DATA_HEADER,
318 cbCounterBlock: DWORD,
319 pcbCounterBlockActual: LPDWORD,
320 ) -> ULONG;
321 pub fn PerfAddCounters(
322 hQuery: HANDLE,
323 pCounters: PPERF_COUNTER_IDENTIFIER,
324 cbCounters: DWORD,
325 ) -> ULONG;
326 pub fn PerfDeleteCounters(
327 hQuery: HANDLE,
328 pCounters: PPERF_COUNTER_IDENTIFIER,
329 cbCounters: DWORD,
330 ) -> ULONG;
331 }