winapi_ui_automation/um/
pdh.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//! Common Performance Data Helper definitions
7use ctypes::c_double;
8use shared::basetsd::DWORD_PTR;
9use shared::guiddef::GUID;
10use shared::minwindef::{BOOL, DWORD, FILETIME, LPDWORD, UCHAR};
11use shared::windef::HWND;
12use um::winnt::{BOOLEAN, HANDLE, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
13pub const PDH_MAX_COUNTER_NAME: usize = 1024;
14pub const PDH_MAX_INSTANCE_NAME: usize = 1024;
15pub const PDH_MAX_COUNTER_PATH: usize = 2048;
16pub const PDH_MAX_DATASOURCE_PATH: usize = 1024;
17pub const PDH_FMT_RAW: DWORD = 0x00000010;
18pub const PDH_FMT_ANSI: DWORD = 0x00000020;
19pub const PDH_FMT_UNICODE: DWORD = 0x00000040;
20pub const PDH_FMT_LONG: DWORD = 0x00000100;
21pub const PDH_FMT_DOUBLE: DWORD = 0x00000200;
22pub const PDH_FMT_LARGE: DWORD = 0x00000400;
23pub const PDH_FMT_NOSCALE: DWORD = 0x00001000;
24pub const PDH_FMT_1000: DWORD = 0x00002000;
25pub const PDH_FMT_NODATA: DWORD = 0x00004000;
26pub const PDH_FMT_NOCAP100: DWORD = 0x00008000;
27pub const PERF_DETAIL_COSTLY: DWORD = 0x00010000;
28pub const PERF_DETAIL_STANDARD: DWORD = 0x0000FFFF;
29pub type PDH_STATUS = LONG;
30pub type PDH_HQUERY = HANDLE;
31pub type HQUERY = PDH_HQUERY;
32pub type PDH_HCOUNTER = HANDLE;
33pub type HCOUNTER = PDH_HCOUNTER;
34pub type PPDH_BROWSE_DLG_CONFIG_A = *mut PDH_BROWSE_DLG_CONFIG_A;
35pub type PPDH_BROWSE_DLG_CONFIG_W = *mut PDH_BROWSE_DLG_CONFIG_W;
36pub type PDH_HLOG = HANDLE;
37pub type PPDH_RAW_LOG_RECORD = *mut PDH_RAW_LOG_RECORD;
38pub type PPDH_TIME_INFO = *mut PDH_TIME_INFO;
39pub type PPDH_RAW_COUNTER = *mut PDH_RAW_COUNTER;
40pub type PPDH_COUNTER_INFO_A = *mut PDH_COUNTER_INFO_A;
41pub type PPDH_COUNTER_INFO_W = *mut PDH_COUNTER_INFO_W;
42pub type PPDH_STATISTICS = *mut PDH_STATISTICS;
43pub type PPDH_FMT_COUNTERVALUE_ITEM_A = *mut PDH_FMT_COUNTERVALUE_ITEM_A;
44pub type PPDH_FMT_COUNTERVALUE_ITEM_W = *mut PDH_FMT_COUNTERVALUE_ITEM_W;
45pub type PPDH_DATA_ITEM_PATH_ELEMENTS_A = *mut PDH_DATA_ITEM_PATH_ELEMENTS_A;
46pub type PPDH_DATA_ITEM_PATH_ELEMENTS_W = *mut PDH_DATA_ITEM_PATH_ELEMENTS_W;
47pub type PPDH_FMT_COUNTERVALUE = *mut PDH_FMT_COUNTERVALUE;
48FN!{stdcall CounterPathCallBack(
49    DWORD_PTR,
50) -> PDH_STATUS}
51pub type PPDH_COUNTER_PATH_ELEMENTS_A = *mut PDH_COUNTER_PATH_ELEMENTS_A;
52pub type PPDH_COUNTER_PATH_ELEMENTS_W = *mut PDH_COUNTER_PATH_ELEMENTS_W;
53pub type PPDH_BROWSE_DLG_CONFIG_HA = *mut PDH_BROWSE_DLG_CONFIG_HA;
54pub type PPDH_BROWSE_DLG_CONFIG_HW = *mut PDH_BROWSE_DLG_CONFIG_HW;
55UNION!{union PDH_FMT_COUNTERVALUE_u {
56    [u64; 1],
57    longValue longValue_mut: LONG,
58    doubleValue doubleValue_mut: c_double,
59    largeValue largeValue_mut: LONGLONG,
60    AnsiStringValue AnsiStringValue_mut: LPCSTR,
61    WideStringValue WideStringValue_mut: LPCWSTR,
62}}
63STRUCT!{struct PDH_FMT_COUNTERVALUE {
64    CStatus: DWORD,
65    u: PDH_FMT_COUNTERVALUE_u,
66}}
67STRUCT!{struct PDH_RAW_LOG_RECORD {
68    dwStructureSize: DWORD,
69    dwRecordType: DWORD,
70    dwItems: DWORD,
71    RawBytes: UCHAR,
72}}
73STRUCT!{struct PDH_TIME_INFO {
74    StartTime: LONGLONG,
75    EndTime: LONGLONG,
76    SampleCount: DWORD,
77}}
78STRUCT!{struct PDH_RAW_COUNTER {
79    CStatus: DWORD,
80    TimeStamp: FILETIME,
81    FirstValue: LONGLONG,
82    SecondValue: LONGLONG,
83    MultiCount: DWORD,
84}}
85STRUCT!{struct PDH_STATISTICS {
86    dwFormat: DWORD,
87    count: DWORD,
88    min: PDH_FMT_COUNTERVALUE,
89    max: PDH_FMT_COUNTERVALUE,
90    mean: PDH_FMT_COUNTERVALUE,
91}}
92STRUCT!{struct PDH_FMT_COUNTERVALUE_ITEM_A {
93    szName: LPSTR,
94    FmtValue: PDH_FMT_COUNTERVALUE,
95}}
96STRUCT!{struct PDH_FMT_COUNTERVALUE_ITEM_W {
97    szName: LPWSTR,
98    FmtValue: PDH_FMT_COUNTERVALUE,
99}}
100STRUCT!{struct PDH_BROWSE_DLG_CONFIG_A {
101    flags: DWORD,
102    hWndOwner: HWND,
103    szDataSource: LPSTR,
104    szReturnPathBuffer: LPSTR,
105    cchReturnPathLength: DWORD,
106    pCallBack: CounterPathCallBack,
107    dwCallBackArg: DWORD_PTR,
108    CallBackStatus: PDH_STATUS,
109    dwDefaultDetailLevel: DWORD,
110    szDialogBoxCaption: LPSTR,
111}}
112BITFIELD!{PDH_BROWSE_DLG_CONFIG_A flags: DWORD [
113    IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
114    SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
115    SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
116    LocalCountersOnly set_LocalCountersOnly[3..4],
117    WildCardInstances set_WildCardInstances[4..5],
118    HideDetailBox set_HideDetailBox[5..6],
119    InitializePath set_InitializePath[6..7],
120    DisableMachineSelection set_DisableMachineSelection[7..8],
121    IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
122    ShowObjectBrowser set_ShowObjectBrowser[9..10],
123]}
124STRUCT!{struct PDH_BROWSE_DLG_CONFIG_W {
125    flags: DWORD,
126    hWndOwner: HWND,
127    szDataSource: LPWSTR,
128    szReturnPathBuffer: LPWSTR,
129    cchReturnPathLength: DWORD,
130    pCallBack: CounterPathCallBack,
131    dwCallBackArg: DWORD_PTR,
132    CallBackStatus: PDH_STATUS,
133    dwDefaultDetailLevel: DWORD,
134    szDialogBoxCaption: LPWSTR,
135}}
136BITFIELD!{PDH_BROWSE_DLG_CONFIG_W flags: DWORD [
137    IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
138    SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
139    SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
140    LocalCountersOnly set_LocalCountersOnly[3..4],
141    WildCardInstances set_WildCardInstances[4..5],
142    HideDetailBox set_HideDetailBox[5..6],
143    InitializePath set_InitializePath[6..7],
144    DisableMachineSelection set_DisableMachineSelection[7..8],
145    IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
146    ShowObjectBrowser set_ShowObjectBrowser[9..10],
147]}
148STRUCT!{struct PDH_COUNTER_PATH_ELEMENTS_A {
149    szMachineName: LPSTR,
150    szObjectName: LPSTR,
151    szInstanceName: LPSTR,
152    szParentInstance: LPSTR,
153    dwInstanceIndex: DWORD,
154    szCounterName: LPSTR,
155}}
156STRUCT!{struct PDH_COUNTER_PATH_ELEMENTS_W {
157    szMachineName: LPWSTR,
158    szObjectName: LPWSTR,
159    szInstanceName: LPWSTR,
160    szParentInstance: LPWSTR,
161    dwInstanceIndex: DWORD,
162    szCounterName: LPWSTR,
163}}
164STRUCT!{struct PDH_DATA_ITEM_PATH_ELEMENTS_A {
165    szMachineName: LPSTR,
166    ObjectGUID: GUID,
167    dwItemId: DWORD,
168    szInstanceName: LPSTR,
169}}
170STRUCT!{struct PDH_DATA_ITEM_PATH_ELEMENTS_W {
171    szMachineName: LPWSTR,
172    ObjectGUID: GUID,
173    dwItemId: DWORD,
174    szInstanceName: LPWSTR,
175}}
176STRUCT!{struct PDH_COUNTER_INFO_A_u_s {
177    szMachineName: LPSTR,
178    szObjectName: LPSTR,
179    szInstanceName: LPSTR,
180    szParentInstance: LPSTR,
181    dwInstanceIndex: DWORD,
182    szCounterName: LPSTR,
183}}
184UNION!{union PDH_COUNTER_INFO_A_u {
185    [u32; 7] [u64; 6],
186    DataItemPath DataItemPath_mut: PDH_DATA_ITEM_PATH_ELEMENTS_A,
187    CounterPath CounterPath_mut: PDH_COUNTER_PATH_ELEMENTS_A,
188    s s_mut: PDH_COUNTER_INFO_A_u_s,
189}}
190STRUCT!{struct PDH_COUNTER_INFO_A {
191    dwLength: DWORD,
192    dwType: DWORD,
193    CVersion: DWORD,
194    CStatus: DWORD,
195    lScale: LONG,
196    lDefaultScale: LONG,
197    dwUserData: DWORD_PTR,
198    dwQueryUserData: DWORD_PTR,
199    szFullPath: LPSTR,
200    u: PDH_COUNTER_INFO_A_u,
201    szExplainText: LPSTR,
202    DataBuffer: [DWORD; 1],
203}}
204STRUCT!{struct PDH_COUNTER_INFO_W_u_s {
205    szMachineName: LPWSTR,
206    szObjectName: LPWSTR,
207    szInstanceName: LPWSTR,
208    szParentInstance: LPWSTR,
209    dwInstanceIndex: DWORD,
210    szCounterName: LPWSTR,
211}}
212UNION!{union PDH_COUNTER_INFO_W_u {
213    [u32; 7] [u64; 6],
214    DataItemPath DataItemPath_mut: PDH_DATA_ITEM_PATH_ELEMENTS_W,
215    CounterPath CounterPath_mut: PDH_COUNTER_PATH_ELEMENTS_W,
216    s s_mut: PDH_COUNTER_INFO_W_u_s,
217}}
218STRUCT!{struct PDH_COUNTER_INFO_W {
219    dwLength: DWORD,
220    dwType: DWORD,
221    CVersion: DWORD,
222    CStatus: DWORD,
223    lScale: LONG,
224    lDefaultScale: LONG,
225    dwUserData: DWORD_PTR,
226    dwQueryUserData: DWORD_PTR,
227    szFullPath: LPWSTR,
228    u: PDH_COUNTER_INFO_W_u,
229    szExplainText: LPWSTR,
230    DataBuffer: [DWORD; 1],
231}}
232STRUCT!{struct PDH_BROWSE_DLG_CONFIG_HA {
233    flags: DWORD,
234    hWndOwner: HWND,
235    hDataSource: PDH_HLOG,
236    szReturnPathBuffer: LPSTR,
237    cchReturnPathLength: DWORD,
238    pCallBack: CounterPathCallBack,
239    dwCallBackArg: DWORD_PTR,
240    CallBackStatus: PDH_STATUS,
241    dwDefaultDetailLevel: DWORD,
242    szDialogBoxCaption: LPSTR,
243}}
244BITFIELD!{PDH_BROWSE_DLG_CONFIG_HA flags: DWORD [
245    IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
246    SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
247    SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
248    LocalCountersOnly set_LocalCountersOnly[3..4],
249    WildCardInstances set_WildCardInstances[4..5],
250    HideDetailBox set_HideDetailBox[5..6],
251    InitializePath set_InitializePath[6..7],
252    DisableMachineSelection set_DisableMachineSelection[7..8],
253    IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
254    ShowObjectBrowser set_ShowObjectBrowser[9..10],
255]}
256STRUCT!{struct PDH_BROWSE_DLG_CONFIG_HW {
257    flags: DWORD,
258    hWndOwner: HWND,
259    hDataSource: PDH_HLOG,
260    szReturnPathBuffer: LPWSTR,
261    cchReturnPathLength: DWORD,
262    pCallBack: CounterPathCallBack,
263    dwCallBackArg: DWORD_PTR,
264    CallBackStatus: PDH_STATUS,
265    dwDefaultDetailLevel: DWORD,
266    szDialogBoxCaption: LPWSTR,
267}}
268BITFIELD!{PDH_BROWSE_DLG_CONFIG_HW flags: DWORD [
269    IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
270    SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
271    SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
272    LocalCountersOnly set_LocalCountersOnly[3..4],
273    WildCardInstances set_WildCardInstances[4..5],
274    HideDetailBox set_HideDetailBox[5..6],
275    InitializePath set_InitializePath[6..7],
276    DisableMachineSelection set_DisableMachineSelection[7..8],
277    IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
278    ShowObjectBrowser set_ShowObjectBrowser[9..10],
279]}
280extern "system" {
281    pub fn PdhGetDllVersion(
282        lpdwVersion: LPDWORD,
283    ) -> PDH_STATUS;
284    pub fn PdhOpenQueryW(
285        szDataSource: LPCWSTR,
286        dwUserData: DWORD_PTR,
287        phQuery: *mut PDH_HQUERY,
288    ) -> PDH_STATUS;
289    pub fn PdhOpenQueryA(
290        szDataSource: LPCSTR,
291        dwUserData: DWORD_PTR,
292        phQuery: *mut PDH_HQUERY,
293    ) -> PDH_STATUS;
294    pub fn PdhAddCounterW(
295        hQuery: PDH_HQUERY,
296        szFullCounterPath: LPCWSTR,
297        dwUserData: DWORD_PTR,
298        phCounter: *mut PDH_HCOUNTER,
299    ) -> PDH_STATUS;
300    pub fn PdhAddCounterA(
301        hQuery: PDH_HQUERY,
302        szFullCounterPath: LPCSTR,
303        dwUserData: DWORD_PTR,
304        phCounter: *mut PDH_HCOUNTER,
305    ) -> PDH_STATUS;
306    pub fn PdhAddEnglishCounterW(
307        hQuery: PDH_HQUERY,
308        szFullCounterPath: LPCWSTR,
309        dwUserData: DWORD_PTR,
310        phCounter: *mut PDH_HCOUNTER,
311    ) -> PDH_STATUS;
312    pub fn PdhAddEnglishCounterA(
313        hQuery: PDH_HQUERY,
314        szFullCounterPath: LPCSTR,
315        dwUserData: DWORD_PTR,
316        phCounter: *mut PDH_HCOUNTER,
317    ) -> PDH_STATUS;
318    pub fn PdhCollectQueryDataWithTime(
319        hQuery: PDH_HQUERY,
320        pllTimeStamp: *mut LONGLONG,
321    ) -> PDH_STATUS;
322    pub fn PdhValidatePathExW(
323        hDataSource: PDH_HLOG,
324        szFullPathBuffer: LPCWSTR,
325    ) -> PDH_STATUS;
326    pub fn PdhValidatePathExA(
327        hDataSource: PDH_HLOG,
328        szFullPathBuffer: LPCSTR,
329    ) -> PDH_STATUS;
330    pub fn PdhRemoveCounter(
331        hCounter: PDH_HCOUNTER,
332    ) -> PDH_STATUS;
333    pub fn PdhCollectQueryData(
334        hQuery: PDH_HQUERY,
335    ) -> PDH_STATUS;
336    pub fn PdhCloseQuery(
337        hQuery: PDH_HQUERY,
338    ) -> PDH_STATUS;
339    pub fn PdhGetFormattedCounterValue(
340        hCounter: PDH_HCOUNTER,
341        dwFormat: DWORD,
342        lpdwType: LPDWORD,
343        pValue: PPDH_FMT_COUNTERVALUE,
344    ) -> PDH_STATUS;
345    pub fn PdhGetFormattedCounterArrayA(
346        hCounter: PDH_HCOUNTER,
347        dwFormat: DWORD,
348        lpdwBufferSize: LPDWORD,
349        lpdwBufferCount: LPDWORD,
350        ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_A,
351    ) -> PDH_STATUS;
352    pub fn PdhGetFormattedCounterArrayW(
353        hCounter: PDH_HCOUNTER,
354        dwFormat: DWORD,
355        lpdwBufferSize: LPDWORD,
356        lpdwBufferCount: LPDWORD,
357        ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_W,
358    ) -> PDH_STATUS;
359    pub fn PdhGetRawCounterValue(
360        hCounter: PDH_HCOUNTER,
361        lpdwType: LPDWORD,
362        pValue: PPDH_RAW_COUNTER,
363    ) -> PDH_STATUS;
364    pub fn PdhGetRawCounterArrayA(
365        hCounter: PDH_HCOUNTER,
366        dwFormat: DWORD,
367        lpdwBufferSize: LPDWORD,
368        lpdwBufferCount: LPDWORD,
369        ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_A,
370    ) -> PDH_STATUS;
371    pub fn PdhGetRawCounterArrayW(
372        hCounter: PDH_HCOUNTER,
373        dwFormat: DWORD,
374        lpdwBufferSize: LPDWORD,
375        lpdwBufferCount: LPDWORD,
376        ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_W,
377    ) -> PDH_STATUS;
378    pub fn PdhCalculateCounterFromRawValue(
379        hCounter: PDH_HCOUNTER,
380        dwFormat: DWORD,
381        rawValue1: PPDH_RAW_COUNTER,
382        rawValue2: PPDH_RAW_COUNTER,
383        fmtValue: PPDH_FMT_COUNTERVALUE,
384    ) -> PDH_STATUS;
385    pub fn PdhComputeCounterStatistics(
386        hCounter: PDH_HCOUNTER,
387        dwFormat: DWORD,
388        dwFirstEntry: DWORD,
389        dwNumEntries: DWORD,
390        lpRawValueArray: PPDH_RAW_COUNTER,
391        data: PPDH_STATISTICS,
392    ) -> PDH_STATUS;
393    pub fn PdhGetCounterInfoW(
394        hCounter: PDH_HCOUNTER,
395        bRetrieveExplainText: BOOLEAN,
396        pdwBufferSize: LPDWORD,
397        lpBuffer: PPDH_COUNTER_INFO_W,
398    ) -> PDH_STATUS;
399    pub fn PdhGetCounterInfoA(
400        hCounter: PDH_HCOUNTER,
401        bRetrieveExplainText: BOOLEAN,
402        pdwBufferSize: LPDWORD,
403        lpBuffer: PPDH_COUNTER_INFO_A,
404    ) -> PDH_STATUS;
405    pub fn PdhSetCounterScaleFactor(
406        hCounter: PDH_HCOUNTER,
407        lFactor: LONG,
408    ) -> PDH_STATUS;
409    pub fn PdhConnectMachineW(
410        szMachineName: LPCWSTR,
411    ) -> PDH_STATUS;
412    pub fn PdhConnectMachineA(
413        szMachineName: LPCSTR,
414    ) -> PDH_STATUS;
415    pub fn PdhEnumMachinesW(
416        szDataSource: LPCWSTR,
417        mszMachineNameList: LPWSTR,
418        pcchBufferLength: LPDWORD,
419    ) -> PDH_STATUS;
420    pub fn PdhEnumMachinesA(
421        szDataSource: LPCSTR,
422        mszMachineNameList: LPSTR,
423        pcchBufferLength: LPDWORD,
424    ) -> PDH_STATUS;
425    pub fn PdhEnumObjectsW(
426        szDataSource: LPCWSTR,
427        szMachineName: LPCWSTR,
428        mszObjectList: LPWSTR,
429        pcchBufferLength: LPDWORD,
430        dwDetailLevel: DWORD,
431        bRefresh: BOOL,
432    ) -> PDH_STATUS;
433    pub fn PdhEnumObjectsA(
434        szDataSource: LPCSTR,
435        szMachineName: LPCSTR,
436        mszObjectList: LPSTR,
437        pcchBufferLength: LPDWORD,
438        dwDetailLevel: DWORD,
439        bRefresh: BOOL,
440    ) -> PDH_STATUS;
441    pub fn PdhEnumObjectItemsW(
442        szDataSource: LPCWSTR,
443        szMachineName: LPCWSTR,
444        szObjectName: LPCWSTR,
445        mszCounterList: LPWSTR,
446        pcchCounterListLength: LPDWORD,
447        mszInstanceList: LPWSTR,
448        pcchInstanceListLength: LPDWORD,
449        dwDetailLevel: DWORD,
450        dwFlags: DWORD,
451    ) -> PDH_STATUS;
452    pub fn PdhEnumObjectItemsA(
453        szDataSource: LPCSTR,
454        szMachineName: LPCSTR,
455        szObjectName: LPCSTR,
456        mszCounterList: LPSTR,
457        pcchCounterListLength: LPDWORD,
458        mszInstanceList: LPSTR,
459        pcchInstanceListLength: LPDWORD,
460        dwDetailLevel: DWORD,
461        dwFlags: DWORD,
462    ) -> PDH_STATUS;
463    pub fn PdhMakeCounterPathW(
464        pCounterPathElements: PPDH_COUNTER_PATH_ELEMENTS_W,
465        szFullPathBuffer: LPWSTR,
466        pcchBufferSize: LPDWORD,
467        dwFlags: DWORD,
468    ) -> PDH_STATUS;
469    pub fn PdhMakeCounterPathA(
470        pCounterPathElements: PPDH_COUNTER_PATH_ELEMENTS_A,
471        szFullPathBuffer: LPSTR,
472        pcchBufferSize: LPDWORD,
473        dwFlags: DWORD,
474    ) -> PDH_STATUS;
475    pub fn PdhParseCounterPathW(
476        szFullPathBuffer: LPCWSTR,
477        pCounterPathElements: *mut PDH_COUNTER_PATH_ELEMENTS_W,
478        pcchBufferSize: LPDWORD,
479        dwFlags: DWORD,
480    ) -> PDH_STATUS;
481    pub fn PdhParseCounterPathA(
482        szFullPathBuffer: LPCSTR,
483        pCounterPathElements: *mut PDH_COUNTER_PATH_ELEMENTS_A,
484        pcchBufferSize: LPDWORD,
485        dwFlags: DWORD,
486    ) -> PDH_STATUS;
487    pub fn PdhParseInstanceNameW(
488        szInstanceString: LPCWSTR,
489        szInstanceName: LPWSTR,
490        pcchInstanceNameLength: LPDWORD,
491        szParentName: LPWSTR,
492        pcchParentNameLength: LPDWORD,
493        lpIndex: LPDWORD,
494    ) -> PDH_STATUS;
495    pub fn PdhParseInstanceNameA(
496        szInstanceString: LPCSTR,
497        szInstanceName: LPSTR,
498        pcchInstanceNameLength: LPDWORD,
499        szParentName: LPSTR,
500        pcchParentNameLength: LPDWORD,
501        lpIndex: LPDWORD,
502    ) -> PDH_STATUS;
503    pub fn PdhValidatePathW(
504        szFullCounterPath: LPCWSTR,
505    ) -> PDH_STATUS;
506    pub fn PdhValidatePathA(
507        szFullCounterPath: LPCSTR,
508    ) -> PDH_STATUS;
509    pub fn PdhGetDefaultPerfObjectW(
510        szDataSource: LPCWSTR,
511        szMachineName: LPCWSTR,
512        szDefaultObjectName: LPWSTR,
513        pcchBufferSize: LPDWORD,
514    ) -> PDH_STATUS;
515    pub fn PdhGetDefaultPerfObjectA(
516        szDataSource: LPCSTR,
517        szMachineName: LPCSTR,
518        szDefaultObjectName: LPSTR,
519        pcchBufferSize: LPDWORD,
520    ) -> PDH_STATUS;
521    pub fn PdhGetDefaultPerfCounterW(
522        szDataSource: LPCWSTR,
523        szMachineName: LPCWSTR,
524        szObjectName: LPCWSTR,
525        szDefaultCounterName: LPWSTR,
526        pcchBufferSize: LPDWORD,
527    ) -> PDH_STATUS;
528    pub fn PdhGetDefaultPerfCounterA(
529        szDataSource: LPCSTR,
530        szMachineName: LPCSTR,
531        szObjectName: LPCSTR,
532        szDefaultCounterName: LPSTR,
533        pcchBufferSize: LPDWORD,
534    ) -> PDH_STATUS;
535    pub fn PdhBrowseCountersW(
536        pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_W,
537    ) -> PDH_STATUS;
538    pub fn PdhBrowseCountersA(
539        pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_A,
540    ) -> PDH_STATUS;
541    pub fn PdhExpandCounterPathW(
542        szWildCardPath: LPCWSTR,
543        mszExpandedPathList: LPWSTR,
544        pcchPathListLength: LPDWORD,
545    ) -> PDH_STATUS;
546    pub fn PdhExpandCounterPathA(
547        szWildCardPath: LPCSTR,
548        mszExpandedPathList: LPSTR,
549        pcchPathListLength: LPDWORD,
550    ) -> PDH_STATUS;
551    pub fn PdhLookupPerfNameByIndexW(
552        szMachineName: LPCWSTR,
553        dwNameIndex: DWORD,
554        szNameBuffer: LPWSTR,
555        pcchNameBufferSize: LPDWORD,
556    ) -> PDH_STATUS;
557    pub fn PdhLookupPerfNameByIndexA(
558        szMachineName: LPCSTR,
559        dwNameIndex: DWORD,
560        szNameBuffer: LPSTR,
561        pcchNameBufferSize: LPDWORD,
562    ) -> PDH_STATUS;
563    pub fn PdhLookupPerfIndexByNameW(
564        szMachineName: LPCWSTR,
565        szNameBuffer: LPCWSTR,
566        pdwIndex: LPDWORD,
567    ) -> PDH_STATUS;
568    pub fn PdhLookupPerfIndexByNameA(
569        szMachineName: LPCSTR,
570        szNameBuffer: LPCSTR,
571        pdwIndex: LPDWORD,
572    ) -> PDH_STATUS;
573    pub fn PdhExpandWildCardPathW(
574        szDataSource: LPCWSTR,
575        szWildCardPath: LPCWSTR,
576        mszExpandedPathList: LPWSTR,
577        pcchPathListLength: LPDWORD,
578        dwFlags: DWORD,
579    ) -> PDH_STATUS;
580    pub fn PdhExpandWildCardPathA(
581        szDataSource: LPCSTR,
582        szWildCardPath: LPCSTR,
583        mszExpandedPathList: LPSTR,
584        pcchPathListLength: LPDWORD,
585        dwFlags: DWORD,
586    ) -> PDH_STATUS;
587    pub fn PdhOpenLogW(
588        szLogFileName: LPCWSTR,
589        dwAccessFlags: DWORD,
590        lpdwLogType: LPDWORD,
591        hQuery: PDH_HQUERY,
592        dwMaxSize: DWORD,
593        szUserCaption: LPCWSTR,
594        phLog: *mut PDH_HLOG,
595    ) -> PDH_STATUS;
596    pub fn PdhOpenLogA(
597        szLogFileName: LPCSTR,
598        dwAccessFlags: DWORD,
599        lpdwLogType: LPDWORD,
600        hQuery: PDH_HQUERY,
601        dwMaxSize: DWORD,
602        szUserCaption: LPCSTR,
603        phLog: *mut PDH_HLOG,
604    ) -> PDH_STATUS;
605    pub fn PdhUpdateLogW(
606        hLog: PDH_HLOG,
607        szUserString: LPCWSTR,
608    ) -> PDH_STATUS;
609    pub fn PdhUpdateLogA(
610        hLog: PDH_HLOG,
611        szUserString: LPCSTR,
612    ) -> PDH_STATUS;
613    pub fn PdhUpdateLogFileCatalog(
614        hLog: PDH_HLOG,
615    ) -> PDH_STATUS;
616    pub fn PdhGetLogFileSize(
617        hLog: PDH_HLOG,
618        llSize: *mut LONGLONG,
619    ) -> PDH_STATUS;
620    pub fn PdhCloseLog(
621        hLog: PDH_HLOG,
622        dwFlags: DWORD,
623    ) -> PDH_STATUS;
624    pub fn PdhSelectDataSourceW(
625        hWndOwner: HWND,
626        dwFlags: DWORD,
627        szDataSource: LPWSTR,
628        pcchBufferLength: LPDWORD,
629    ) -> PDH_STATUS;
630    pub fn PdhSelectDataSourceA(
631        hWndOwner: HWND,
632        dwFlags: DWORD,
633        szDataSource: LPSTR,
634        pcchBufferLength: LPDWORD,
635    ) -> PDH_STATUS;
636    pub fn PdhIsRealTimeQuery(
637        hQuery: PDH_HQUERY,
638    ) -> PDH_STATUS;
639    pub fn PdhSetQueryTimeRange(
640        hQuery: PDH_HQUERY,
641        pInfo: PPDH_TIME_INFO,
642    ) -> PDH_STATUS;
643    pub fn PdhGetDataSourceTimeRangeW(
644        szDataSource: LPCWSTR,
645        pdwNumEntries: LPDWORD,
646        pInfo: PPDH_TIME_INFO,
647        pdwBufferSize: LPDWORD,
648    ) -> PDH_STATUS;
649    pub fn PdhGetDataSourceTimeRangeA(
650        szDataSource: LPCSTR,
651        pdwNumEntries: LPDWORD,
652        pInfo: PPDH_TIME_INFO,
653        pdwBufferSize: LPDWORD,
654    ) -> PDH_STATUS;
655    pub fn PdhCollectQueryDataEx(
656        hQuery: PDH_HQUERY,
657        dwIntervalTime: DWORD,
658        hNewDataEvent: HANDLE,
659    ) -> PDH_STATUS;
660    pub fn PdhFormatFromRawValue(
661        dwCounterType: DWORD,
662        dwFormat: DWORD,
663        pTimeBase: *mut LONGLONG,
664        rawValue1: PPDH_RAW_COUNTER,
665        rawValue2: PPDH_RAW_COUNTER,
666        fmtValue: PPDH_FMT_COUNTERVALUE,
667    ) -> PDH_STATUS;
668    pub fn PdhGetCounterTimeBase(
669        hCounter: PDH_HCOUNTER,
670        pTimeBase: *mut LONGLONG,
671    ) -> PDH_STATUS;
672    pub fn PdhReadRawLogRecord(
673        hLog: PDH_HLOG,
674        ftRecord: FILETIME,
675        pRawLogRecord: PPDH_RAW_LOG_RECORD,
676        pdwBufferLength: LPDWORD,
677    ) -> PDH_STATUS;
678    pub fn PdhSetDefaultRealTimeDataSource(
679        dwDataSourceId: DWORD,
680    ) -> PDH_STATUS;
681    pub fn PdhBindInputDataSourceW(
682        phDataSource: *mut PDH_HLOG,
683        szLogFileNameList: LPCWSTR,
684    ) -> PDH_STATUS;
685    pub fn PdhBindInputDataSourceA(
686        phDataSource: *mut PDH_HLOG,
687        szLogFileNameList: LPCSTR,
688    ) -> PDH_STATUS;
689    pub fn PdhOpenQueryH(
690        hDataSource: PDH_HLOG,
691        dwUserData: DWORD_PTR,
692        phQuery: *mut PDH_HQUERY,
693    ) -> PDH_STATUS;
694    pub fn PdhEnumMachinesHW(
695        hDataSource: PDH_HLOG,
696        mszMachineNameList: LPWSTR,
697        pcchBufferLength: LPDWORD,
698    ) -> PDH_STATUS;
699    pub fn PdhEnumMachinesHA(
700        hDataSource: PDH_HLOG,
701        mszMachineNameList: LPSTR,
702        pcchBufferLength: LPDWORD,
703    ) -> PDH_STATUS;
704    pub fn PdhEnumObjectsHW(
705        hDataSource: PDH_HLOG,
706        szMachineName: LPCWSTR,
707        mszObjectList: LPWSTR,
708        pcchBufferLength: LPDWORD,
709        dwDetailLevel: DWORD,
710        bRefresh: BOOL,
711    ) -> PDH_STATUS;
712    pub fn PdhEnumObjectsHA(
713        hDataSource: PDH_HLOG,
714        szMachineName: LPCSTR,
715        mszObjectList: LPSTR,
716        pcchBufferLength: LPDWORD,
717        dwDetailLevel: DWORD,
718        bRefresh: BOOL,
719    ) -> PDH_STATUS;
720    pub fn PdhEnumObjectItemsHW(
721        hDataSource: PDH_HLOG,
722        szMachineName: LPCWSTR,
723        szObjectName: LPCWSTR,
724        mszCounterList: LPWSTR,
725        pcchCounterListLength: LPDWORD,
726        mszInstanceList: LPWSTR,
727        pcchInstanceListLength: LPDWORD,
728        dwDetailLevel: DWORD,
729        dwFlags: DWORD,
730    ) -> PDH_STATUS;
731    pub fn PdhEnumObjectItemsHA(
732        hDataSource: PDH_HLOG,
733        szMachineName: LPCSTR,
734        szObjectName: LPCSTR,
735        mszCounterList: LPSTR,
736        pcchCounterListLength: LPDWORD,
737        mszInstanceList: LPSTR,
738        pcchInstanceListLength: LPDWORD,
739        dwDetailLevel: DWORD,
740        dwFlags: DWORD,
741    ) -> PDH_STATUS;
742    pub fn PdhExpandWildCardPathHW(
743        hDataSource: PDH_HLOG,
744        szWildCardPath: LPCWSTR,
745        mszExpandedPathList: LPWSTR,
746        pcchPathListLength: LPDWORD,
747        dwFlags: DWORD,
748    ) -> PDH_STATUS;
749    pub fn PdhExpandWildCardPathHA(
750        hDataSource: PDH_HLOG,
751        szWildCardPath: LPCSTR,
752        mszExpandedPathList: LPSTR,
753        pcchPathListLength: LPDWORD,
754        dwFlags: DWORD,
755    ) -> PDH_STATUS;
756    pub fn PdhGetDataSourceTimeRangeH(
757        hDataSource: PDH_HLOG,
758        pdwNumEntries: LPDWORD,
759        pInfo: PPDH_TIME_INFO,
760        pdwBufferSize: LPDWORD,
761    ) -> PDH_STATUS;
762    pub fn PdhGetDefaultPerfObjectHW(
763        hDataSource: PDH_HLOG,
764        szMachineName: LPCWSTR,
765        szDefaultObjectName: LPWSTR,
766        pcchBufferSize: LPDWORD,
767    ) -> PDH_STATUS;
768    pub fn PdhGetDefaultPerfObjectHA(
769        hDataSource: PDH_HLOG,
770        szMachineName: LPCSTR,
771        szDefaultObjectName: LPSTR,
772        pcchBufferSize: LPDWORD,
773    ) -> PDH_STATUS;
774    pub fn PdhGetDefaultPerfCounterHW(
775        hDataSource: PDH_HLOG,
776        szMachineName: LPCWSTR,
777        szObjectName: LPCWSTR,
778        szDefaultCounterName: LPWSTR,
779        pcchBufferSize: LPDWORD,
780    ) -> PDH_STATUS;
781    pub fn PdhGetDefaultPerfCounterHA(
782        hDataSource: PDH_HLOG,
783        szMachineName: LPCSTR,
784        szObjectName: LPCSTR,
785        szDefaultCounterName: LPSTR,
786        pcchBufferSize: LPDWORD,
787    ) -> PDH_STATUS;
788    pub fn PdhBrowseCountersHW(
789        pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_HW,
790    ) -> PDH_STATUS;
791    pub fn PdhBrowseCountersHA(
792        pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_HA,
793    ) -> PDH_STATUS;
794    pub fn PdhEnumLogSetNamesW(
795        szDataSource: LPCWSTR,
796        mszLogSetNameList: LPWSTR,
797        pcchBufferLength: LPDWORD,
798    ) -> PDH_STATUS;
799    pub fn PdhEnumLogSetNamesA(
800        szDataSource: LPCSTR,
801        mszLogSetNameList: LPSTR,
802        pcchBufferLength: LPDWORD,
803    ) -> PDH_STATUS;
804}
805// pub fn PdhVerifySQLDBW() -> PDH_STATUS;
806// pub fn PdhVerifySQLDBA() -> PDH_STATUS;
807// pub fn PdhCreateSQLTablesW() -> PDH_STATUS;
808// pub fn PdhCreateSQLTablesA() -> PDH_STATUS;
809//pub fn PdhGetLogSetGUID() -> PDH_STATUS;
810// pub fn PdhSetLogSetRunID() -> PDH_STATUS;