1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _PDH_H_
7#define _PDH_H_
8
9#include <_mingw_unicode.h>
10#include <windows.h>
11#include <winperf.h>
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17  typedef LONG PDH_STATUS;
18
19#define PDH_FUNCTION PDH_STATUS WINAPI
20
21#define PDH_CVERSION_WIN40 ((DWORD)(0x0400))
22#define PDH_CVERSION_WIN50 ((DWORD)(0x0500))
23
24#define PDH_VERSION ((DWORD)((PDH_CVERSION_WIN50) + 0x0003))
25
26#define IsSuccessSeverity(ErrorCode) ((!((DWORD)(ErrorCode) & 0xC0000000)) ? TRUE : FALSE)
27#define IsInformationalSeverity(ErrorCode) ((((DWORD)(ErrorCode) & 0xC0000000)==(DWORD)0x40000000) ? TRUE : FALSE)
28#define IsWarningSeverity(ErrorCode) ((((DWORD)(ErrorCode) & 0xC0000000)==(DWORD)0x80000000) ? TRUE : FALSE)
29#define IsErrorSeverity(ErrorCode) ((((DWORD)(ErrorCode) & 0xC0000000)==(DWORD)0xC0000000) ? TRUE : FALSE)
30
31#define MAX_COUNTER_PATH 256
32
33#define PDH_MAX_COUNTER_NAME 1024
34#define PDH_MAX_INSTANCE_NAME 1024
35#define PDH_MAX_COUNTER_PATH 2048
36#define PDH_MAX_DATASOURCE_PATH 1024
37
38  typedef HANDLE PDH_HCOUNTER;
39  typedef HANDLE PDH_HQUERY;
40  typedef HANDLE PDH_HLOG;
41
42  typedef PDH_HCOUNTER HCOUNTER;
43  typedef PDH_HQUERY HQUERY;
44#ifndef _LMHLOGDEFINED_
45  typedef PDH_HLOG HLOG;
46#endif
47
48#ifdef INVALID_HANDLE_VALUE
49#undef INVALID_HANDLE_VALUE
50#define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
51#endif
52
53#define H_REALTIME_DATASOURCE NULL
54#define H_WBEM_DATASOURCE INVALID_HANDLE_VALUE
55
56  typedef struct _PDH_RAW_COUNTER {
57    DWORD CStatus;
58    FILETIME TimeStamp;
59    LONGLONG FirstValue;
60    LONGLONG SecondValue;
61    DWORD MultiCount;
62  } PDH_RAW_COUNTER,*PPDH_RAW_COUNTER;
63
64  typedef struct _PDH_RAW_COUNTER_ITEM_A {
65    LPSTR szName;
66    PDH_RAW_COUNTER RawValue;
67  } PDH_RAW_COUNTER_ITEM_A,*PPDH_RAW_COUNTER_ITEM_A;
68
69  typedef struct _PDH_RAW_COUNTER_ITEM_W {
70    LPWSTR szName;
71    PDH_RAW_COUNTER RawValue;
72  } PDH_RAW_COUNTER_ITEM_W,*PPDH_RAW_COUNTER_ITEM_W;
73
74  typedef struct _PDH_FMT_COUNTERVALUE {
75    DWORD CStatus;
76    __C89_NAMELESS union {
77      LONG longValue;
78      double doubleValue;
79      LONGLONG largeValue;
80      LPCSTR AnsiStringValue;
81      LPCWSTR WideStringValue;
82    };
83  } PDH_FMT_COUNTERVALUE,*PPDH_FMT_COUNTERVALUE;
84
85  typedef struct _PDH_FMT_COUNTERVALUE_ITEM_A {
86    LPSTR szName;
87    PDH_FMT_COUNTERVALUE FmtValue;
88  } PDH_FMT_COUNTERVALUE_ITEM_A,*PPDH_FMT_COUNTERVALUE_ITEM_A;
89
90  typedef struct _PDH_FMT_COUNTERVALUE_ITEM_W {
91    LPWSTR szName;
92    PDH_FMT_COUNTERVALUE FmtValue;
93  } PDH_FMT_COUNTERVALUE_ITEM_W,*PPDH_FMT_COUNTERVALUE_ITEM_W;
94
95  typedef struct _PDH_STATISTICS {
96    DWORD dwFormat;
97    DWORD count;
98    PDH_FMT_COUNTERVALUE min;
99    PDH_FMT_COUNTERVALUE max;
100    PDH_FMT_COUNTERVALUE mean;
101  } PDH_STATISTICS,*PPDH_STATISTICS;
102
103  typedef struct _PDH_COUNTER_PATH_ELEMENTS_A {
104    LPSTR szMachineName;
105    LPSTR szObjectName;
106    LPSTR szInstanceName;
107    LPSTR szParentInstance;
108    DWORD dwInstanceIndex;
109    LPSTR szCounterName;
110  } PDH_COUNTER_PATH_ELEMENTS_A,*PPDH_COUNTER_PATH_ELEMENTS_A;
111
112  typedef struct _PDH_COUNTER_PATH_ELEMENTS_W {
113    LPWSTR szMachineName;
114    LPWSTR szObjectName;
115    LPWSTR szInstanceName;
116    LPWSTR szParentInstance;
117    DWORD dwInstanceIndex;
118    LPWSTR szCounterName;
119  } PDH_COUNTER_PATH_ELEMENTS_W,*PPDH_COUNTER_PATH_ELEMENTS_W;
120
121  typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A {
122    LPSTR szMachineName;
123    GUID ObjectGUID;
124    DWORD dwItemId;
125    LPSTR szInstanceName;
126  } PDH_DATA_ITEM_PATH_ELEMENTS_A,*PPDH_DATA_ITEM_PATH_ELEMENTS_A;
127
128  typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W {
129    LPWSTR szMachineName;
130    GUID ObjectGUID;
131    DWORD dwItemId;
132    LPWSTR szInstanceName;
133  } PDH_DATA_ITEM_PATH_ELEMENTS_W,*PPDH_DATA_ITEM_PATH_ELEMENTS_W;
134
135  typedef struct _PDH_COUNTER_INFO_A {
136    DWORD dwLength;
137    DWORD dwType;
138    DWORD CVersion;
139    DWORD CStatus;
140    LONG lScale;
141    LONG lDefaultScale;
142    DWORD_PTR dwUserData;
143    DWORD_PTR dwQueryUserData;
144    LPSTR szFullPath;
145    __C89_NAMELESS union {
146      PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
147      PDH_COUNTER_PATH_ELEMENTS_A CounterPath;
148      __C89_NAMELESS struct {
149	LPSTR szMachineName;
150	LPSTR szObjectName;
151	LPSTR szInstanceName;
152	LPSTR szParentInstance;
153	DWORD dwInstanceIndex;
154	LPSTR szCounterName;
155      };
156    };
157    LPSTR szExplainText;
158    DWORD DataBuffer[1];
159  } PDH_COUNTER_INFO_A,*PPDH_COUNTER_INFO_A;
160
161  typedef struct _PDH_COUNTER_INFO_W {
162    DWORD dwLength;
163    DWORD dwType;
164    DWORD CVersion;
165    DWORD CStatus;
166    LONG lScale;
167    LONG lDefaultScale;
168    DWORD_PTR dwUserData;
169    DWORD_PTR dwQueryUserData;
170    LPWSTR szFullPath;
171    __C89_NAMELESS union {
172      PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
173      PDH_COUNTER_PATH_ELEMENTS_W CounterPath;
174      __C89_NAMELESS struct {
175	LPWSTR szMachineName;
176	LPWSTR szObjectName;
177	LPWSTR szInstanceName;
178	LPWSTR szParentInstance;
179	DWORD dwInstanceIndex;
180	LPWSTR szCounterName;
181      };
182    };
183    LPWSTR szExplainText;
184    DWORD DataBuffer[1];
185  } PDH_COUNTER_INFO_W,*PPDH_COUNTER_INFO_W;
186
187  typedef struct _PDH_TIME_INFO {
188    LONGLONG StartTime;
189    LONGLONG EndTime;
190    DWORD SampleCount;
191  } PDH_TIME_INFO,*PPDH_TIME_INFO;
192
193  typedef struct _PDH_RAW_LOG_RECORD {
194    DWORD dwStructureSize;
195    DWORD dwRecordType;
196    DWORD dwItems;
197    UCHAR RawBytes[1];
198  } PDH_RAW_LOG_RECORD,*PPDH_RAW_LOG_RECORD;
199
200  typedef struct _PDH_LOG_SERVICE_QUERY_INFO_A {
201    DWORD dwSize;
202    DWORD dwFlags;
203    DWORD dwLogQuota;
204    LPSTR szLogFileCaption;
205    LPSTR szDefaultDir;
206    LPSTR szBaseFileName;
207    DWORD dwFileType;
208    DWORD dwReserved;
209    __C89_NAMELESS union {
210      __C89_NAMELESS struct {
211	DWORD PdlAutoNameInterval;
212	DWORD PdlAutoNameUnits;
213	LPSTR PdlCommandFilename;
214	LPSTR PdlCounterList;
215	DWORD PdlAutoNameFormat;
216	DWORD PdlSampleInterval;
217	FILETIME PdlLogStartTime;
218	FILETIME PdlLogEndTime;
219      };
220      __C89_NAMELESS struct {
221	DWORD TlNumberOfBuffers;
222	DWORD TlMinimumBuffers;
223	DWORD TlMaximumBuffers;
224	DWORD TlFreeBuffers;
225	DWORD TlBufferSize;
226	DWORD TlEventsLost;
227	DWORD TlLoggerThreadId;
228	DWORD TlBuffersWritten;
229	DWORD TlLogHandle;
230	LPSTR TlLogFileName;
231      };
232    };
233  } PDH_LOG_SERVICE_QUERY_INFO_A,*PPDH_LOG_SERVICE_QUERY_INFO_A;
234
235  typedef struct _PDH_LOG_SERVICE_QUERY_INFO_W {
236    DWORD dwSize;
237    DWORD dwFlags;
238    DWORD dwLogQuota;
239    LPWSTR szLogFileCaption;
240    LPWSTR szDefaultDir;
241    LPWSTR szBaseFileName;
242    DWORD dwFileType;
243    DWORD dwReserved;
244    __C89_NAMELESS union {
245      __C89_NAMELESS struct {
246	DWORD PdlAutoNameInterval;
247	DWORD PdlAutoNameUnits;
248	LPWSTR PdlCommandFilename;
249	LPWSTR PdlCounterList;
250	DWORD PdlAutoNameFormat;
251	DWORD PdlSampleInterval;
252	FILETIME PdlLogStartTime;
253	FILETIME PdlLogEndTime;
254      };
255      __C89_NAMELESS struct {
256	DWORD TlNumberOfBuffers;
257	DWORD TlMinimumBuffers;
258	DWORD TlMaximumBuffers;
259	DWORD TlFreeBuffers;
260	DWORD TlBufferSize;
261	DWORD TlEventsLost;
262	DWORD TlLoggerThreadId;
263	DWORD TlBuffersWritten;
264	DWORD TlLogHandle;
265	LPWSTR TlLogFileName;
266      };
267    };
268  } PDH_LOG_SERVICE_QUERY_INFO_W,*PPDH_LOG_SERVICE_QUERY_INFO_W;
269
270#define MAX_TIME_VALUE ((LONGLONG) 0x7FFFFFFFFFFFFFFF)
271#define MIN_TIME_VALUE ((LONGLONG) 0)
272
273  PDH_FUNCTION PdhGetDllVersion(LPDWORD lpdwVersion);
274  PDH_FUNCTION PdhOpenQueryW(LPCWSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
275  PDH_FUNCTION PdhOpenQueryA(LPCSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
276  PDH_FUNCTION PdhAddCounterW(PDH_HQUERY hQuery,LPCWSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
277  PDH_FUNCTION PdhAddCounterA(PDH_HQUERY hQuery,LPCSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
278  PDH_FUNCTION PdhRemoveCounter(PDH_HCOUNTER hCounter);
279  PDH_FUNCTION PdhCollectQueryData(PDH_HQUERY hQuery);
280  PDH_FUNCTION PdhCloseQuery(PDH_HQUERY hQuery);
281  PDH_FUNCTION PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwType,PPDH_FMT_COUNTERVALUE pValue);
282  PDH_FUNCTION PdhGetFormattedCounterArrayA(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_A ItemBuffer);
283  PDH_FUNCTION PdhGetFormattedCounterArrayW(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_W ItemBuffer);
284
285#define PDH_FMT_RAW ((DWORD) 0x00000010)
286#define PDH_FMT_ANSI ((DWORD) 0x00000020)
287#define PDH_FMT_UNICODE ((DWORD) 0x00000040)
288#define PDH_FMT_LONG ((DWORD) 0x00000100)
289#define PDH_FMT_DOUBLE ((DWORD) 0x00000200)
290#define PDH_FMT_LARGE ((DWORD) 0x00000400)
291#define PDH_FMT_NOSCALE ((DWORD) 0x00001000)
292#define PDH_FMT_1000 ((DWORD) 0x00002000)
293#define PDH_FMT_NODATA ((DWORD) 0x00004000)
294#define PDH_FMT_NOCAP100 ((DWORD) 0x00008000)
295#define PERF_DETAIL_COSTLY ((DWORD) 0x00010000)
296#define PERF_DETAIL_STANDARD ((DWORD) 0x0000FFFF)
297
298  PDH_FUNCTION PdhGetRawCounterValue(PDH_HCOUNTER hCounter,LPDWORD lpdwType,PPDH_RAW_COUNTER pValue);
299  PDH_FUNCTION PdhGetRawCounterArrayA(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_A ItemBuffer);
300  PDH_FUNCTION PdhGetRawCounterArrayW(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_W ItemBuffer);
301  PDH_FUNCTION PdhCalculateCounterFromRawValue(PDH_HCOUNTER hCounter,DWORD dwFormat,PPDH_RAW_COUNTER rawValue1,PPDH_RAW_COUNTER rawValue2,PPDH_FMT_COUNTERVALUE fmtValue);
302  PDH_FUNCTION PdhComputeCounterStatistics(PDH_HCOUNTER hCounter,DWORD dwFormat,DWORD dwFirstEntry,DWORD dwNumEntries,PPDH_RAW_COUNTER lpRawValueArray,PPDH_STATISTICS data);
303  PDH_FUNCTION PdhGetCounterInfoW(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_W lpBuffer);
304  PDH_FUNCTION PdhGetCounterInfoA(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_A lpBuffer);
305
306#define PDH_MAX_SCALE (__MSABI_LONG(7))
307#define PDH_MIN_SCALE (__MSABI_LONG(-7))
308
309  PDH_FUNCTION PdhSetCounterScaleFactor(PDH_HCOUNTER hCounter,LONG lFactor);
310  PDH_FUNCTION PdhConnectMachineW(LPCWSTR szMachineName);
311  PDH_FUNCTION PdhConnectMachineA(LPCSTR szMachineName);
312  PDH_FUNCTION PdhEnumMachinesW(LPCWSTR szDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize);
313  PDH_FUNCTION PdhEnumMachinesA(LPCSTR szDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize);
314  PDH_FUNCTION PdhEnumObjectsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
315  PDH_FUNCTION PdhEnumObjectsA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
316  PDH_FUNCTION PdhEnumObjectItemsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
317  PDH_FUNCTION PdhEnumObjectItemsA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
318
319#define PDH_OBJECT_HAS_INSTANCES ((DWORD) 0x00000001)
320
321  PDH_FUNCTION PdhMakeCounterPathW(PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPWSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags);
322  PDH_FUNCTION PdhMakeCounterPathA(PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags);
323  PDH_FUNCTION PdhParseCounterPathW(LPCWSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags);
324  PDH_FUNCTION PdhParseCounterPathA(LPCSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags);
325
326#define PDH_PATH_WBEM_RESULT ((DWORD) 0x00000001)
327#define PDH_PATH_WBEM_INPUT ((DWORD) 0x00000002)
328
329#define PDH_PATH_LANG_FLAGS(LangId,Flags) ((DWORD)(((LangId & 0x0000FFFF) << 16) | (Flags & 0x0000FFFF)))
330
331  PDH_FUNCTION PdhParseInstanceNameW(LPCWSTR szInstanceString,LPWSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPWSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex);
332  PDH_FUNCTION PdhParseInstanceNameA(LPCSTR szInstanceString,LPSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex);
333  PDH_FUNCTION PdhValidatePathW(LPCWSTR szFullPathBuffer);
334  PDH_FUNCTION PdhValidatePathA(LPCSTR szFullPathBuffer);
335  PDH_FUNCTION PdhGetDefaultPerfObjectW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize);
336  PDH_FUNCTION PdhGetDefaultPerfObjectA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize);
337  PDH_FUNCTION PdhGetDefaultPerfCounterW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize);
338  PDH_FUNCTION PdhGetDefaultPerfCounterA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize);
339
340  typedef PDH_STATUS (WINAPI *CounterPathCallBack)(DWORD_PTR);
341
342  typedef struct _BrowseDlgConfig_HW {
343    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved : 22;
344    HWND hWndOwner;
345    PDH_HLOG hDataSource;
346    LPWSTR szReturnPathBuffer;
347    DWORD cchReturnPathLength;
348    CounterPathCallBack pCallBack;
349    DWORD_PTR dwCallBackArg;
350    PDH_STATUS CallBackStatus;
351    DWORD dwDefaultDetailLevel;
352    LPWSTR szDialogBoxCaption;
353  } PDH_BROWSE_DLG_CONFIG_HW,*PPDH_BROWSE_DLG_CONFIG_HW;
354
355  typedef struct _BrowseDlgConfig_HA {
356    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
357    HWND hWndOwner;
358    PDH_HLOG hDataSource;
359    LPSTR szReturnPathBuffer;
360    DWORD cchReturnPathLength;
361    CounterPathCallBack pCallBack;
362    DWORD_PTR dwCallBackArg;
363    PDH_STATUS CallBackStatus;
364    DWORD dwDefaultDetailLevel;
365    LPSTR szDialogBoxCaption;
366  } PDH_BROWSE_DLG_CONFIG_HA,*PPDH_BROWSE_DLG_CONFIG_HA;
367
368  typedef struct _BrowseDlgConfig_W {
369    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
370    HWND hWndOwner;
371    LPWSTR szDataSource;
372    LPWSTR szReturnPathBuffer;
373    DWORD cchReturnPathLength;
374    CounterPathCallBack pCallBack;
375    DWORD_PTR dwCallBackArg;
376    PDH_STATUS CallBackStatus;
377    DWORD dwDefaultDetailLevel;
378    LPWSTR szDialogBoxCaption;
379  } PDH_BROWSE_DLG_CONFIG_W,*PPDH_BROWSE_DLG_CONFIG_W;
380
381  typedef struct _BrowseDlgConfig_A {
382    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
383    HWND hWndOwner;
384    LPSTR szDataSource;
385    LPSTR szReturnPathBuffer;
386    DWORD cchReturnPathLength;
387    CounterPathCallBack pCallBack;
388    DWORD_PTR dwCallBackArg;
389    PDH_STATUS CallBackStatus;
390    DWORD dwDefaultDetailLevel;
391    LPSTR szDialogBoxCaption;
392  } PDH_BROWSE_DLG_CONFIG_A,*PPDH_BROWSE_DLG_CONFIG_A;
393
394  PDH_FUNCTION PdhBrowseCountersW(PPDH_BROWSE_DLG_CONFIG_W pBrowseDlgData);
395  PDH_FUNCTION PdhBrowseCountersA(PPDH_BROWSE_DLG_CONFIG_A pBrowseDlgData);
396  PDH_FUNCTION PdhExpandCounterPathW(LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength);
397  PDH_FUNCTION PdhExpandCounterPathA(LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength);
398  PDH_FUNCTION PdhLookupPerfNameByIndexW(LPCWSTR szMachineName,DWORD dwNameIndex,LPWSTR szNameBuffer,LPDWORD pcchNameBufferSize);
399  PDH_FUNCTION PdhLookupPerfNameByIndexA(LPCSTR szMachineName,DWORD dwNameIndex,LPSTR szNameBuffer,LPDWORD pcchNameBufferSize);
400  PDH_FUNCTION PdhLookupPerfIndexByNameW(LPCWSTR szMachineName,LPCWSTR szNameBuffer,LPDWORD pdwIndex);
401  PDH_FUNCTION PdhLookupPerfIndexByNameA(LPCSTR szMachineName,LPCSTR szNameBuffer,LPDWORD pdwIndex);
402
403#define PDH_NOEXPANDCOUNTERS 1
404#define PDH_NOEXPANDINSTANCES 2
405#define PDH_REFRESHCOUNTERS 4
406
407  PDH_FUNCTION PdhExpandWildCardPathA(LPCSTR szDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
408  PDH_FUNCTION PdhExpandWildCardPathW(LPCWSTR szDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
409
410#define PDH_LOG_READ_ACCESS ((DWORD) 0x00010000)
411#define PDH_LOG_WRITE_ACCESS ((DWORD) 0x00020000)
412#define PDH_LOG_UPDATE_ACCESS ((DWORD) 0x00040000)
413#define PDH_LOG_ACCESS_MASK ((DWORD) 0x000F0000)
414
415#define PDH_LOG_CREATE_NEW ((DWORD) 0x00000001)
416#define PDH_LOG_CREATE_ALWAYS ((DWORD) 0x00000002)
417#define PDH_LOG_OPEN_ALWAYS ((DWORD) 0x00000003)
418#define PDH_LOG_OPEN_EXISTING ((DWORD) 0x00000004)
419#define PDH_LOG_CREATE_MASK ((DWORD) 0x0000000F)
420
421#define PDH_LOG_OPT_USER_STRING ((DWORD) 0x01000000)
422#define PDH_LOG_OPT_CIRCULAR ((DWORD) 0x02000000)
423#define PDH_LOG_OPT_MAX_IS_BYTES ((DWORD) 0x04000000)
424#define PDH_LOG_OPT_APPEND ((DWORD) 0x08000000)
425#define PDH_LOG_OPT_MASK ((DWORD) 0x0F000000)
426
427#define PDH_LOG_TYPE_UNDEFINED 0
428#define PDH_LOG_TYPE_CSV 1
429#define PDH_LOG_TYPE_TSV 2
430
431#define PDH_LOG_TYPE_TRACE_KERNEL 4
432#define PDH_LOG_TYPE_TRACE_GENERIC 5
433#define PDH_LOG_TYPE_PERFMON 6
434#define PDH_LOG_TYPE_SQL 7
435#define PDH_LOG_TYPE_BINARY 8
436
437  PDH_FUNCTION PdhOpenLogW(LPCWSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCWSTR szUserCaption,PDH_HLOG *phLog);
438  PDH_FUNCTION PdhOpenLogA(LPCSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCSTR szUserCaption,PDH_HLOG *phLog);
439  PDH_FUNCTION PdhUpdateLogW(PDH_HLOG hLog,LPCWSTR szUserString);
440  PDH_FUNCTION PdhUpdateLogA(PDH_HLOG hLog,LPCSTR szUserString);
441  PDH_FUNCTION PdhUpdateLogFileCatalog(PDH_HLOG hLog);
442  PDH_FUNCTION PdhGetLogFileSize(PDH_HLOG hLog,LONGLONG *llSize);
443  PDH_FUNCTION PdhCloseLog(PDH_HLOG hLog,DWORD dwFlags);
444
445#define PDH_FLAGS_CLOSE_QUERY ((DWORD) 0x00000001)
446#define PDH_FLAGS_FILE_BROWSER_ONLY ((DWORD) 0x00000001)
447
448  PDH_FUNCTION PdhSelectDataSourceW(HWND hWndOwner,DWORD dwFlags,LPWSTR szDataSource,LPDWORD pcchBufferLength);
449  PDH_FUNCTION PdhSelectDataSourceA(HWND hWndOwner,DWORD dwFlags,LPSTR szDataSource,LPDWORD pcchBufferLength);
450  WINBOOL PdhIsRealTimeQuery(PDH_HQUERY hQuery);
451  PDH_FUNCTION PdhSetQueryTimeRange(PDH_HQUERY hQuery,PPDH_TIME_INFO pInfo);
452  PDH_FUNCTION PdhGetDataSourceTimeRangeW(LPCWSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize);
453  PDH_FUNCTION PdhGetDataSourceTimeRangeA(LPCSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD dwBufferSize);
454  PDH_FUNCTION PdhCollectQueryDataEx(PDH_HQUERY hQuery,DWORD dwIntervalTime,HANDLE hNewDataEvent);
455  PDH_FUNCTION PdhFormatFromRawValue(DWORD dwCounterType,DWORD dwFormat,LONGLONG *pTimeBase,PPDH_RAW_COUNTER pRawValue1,PPDH_RAW_COUNTER pRawValue2,PPDH_FMT_COUNTERVALUE pFmtValue);
456  PDH_FUNCTION PdhGetCounterTimeBase(PDH_HCOUNTER hCounter,LONGLONG *pTimeBase);
457  PDH_FUNCTION PdhReadRawLogRecord(PDH_HLOG hLog,FILETIME ftRecord,PPDH_RAW_LOG_RECORD pRawLogRecord,LPDWORD pdwBufferLength);
458
459#define DATA_SOURCE_REGISTRY ((DWORD) 0x00000001)
460#define DATA_SOURCE_LOGFILE ((DWORD) 0x00000002)
461#define DATA_SOURCE_WBEM ((DWORD) 0x00000004)
462
463  PDH_FUNCTION PdhSetDefaultRealTimeDataSource(DWORD dwDataSourceId);
464  PDH_FUNCTION PdhBindInputDataSourceW(PDH_HLOG *phDataSource,LPCWSTR LogFileNameList);
465  PDH_FUNCTION PdhBindInputDataSourceA(PDH_HLOG *phDataSource,LPCSTR LogFileNameList);
466  PDH_FUNCTION PdhOpenQueryH(PDH_HLOG hDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
467  PDH_FUNCTION PdhEnumMachinesHW(PDH_HLOG hDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize);
468  PDH_FUNCTION PdhEnumMachinesHA(PDH_HLOG hDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize);
469  PDH_FUNCTION PdhEnumObjectsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
470  PDH_FUNCTION PdhEnumObjectsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
471  PDH_FUNCTION PdhEnumObjectItemsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
472  PDH_FUNCTION PdhEnumObjectItemsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
473  PDH_FUNCTION PdhExpandWildCardPathHW(PDH_HLOG hDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
474  PDH_FUNCTION PdhExpandWildCardPathHA(PDH_HLOG hDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
475  PDH_FUNCTION PdhGetDataSourceTimeRangeH(PDH_HLOG hDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize);
476  PDH_FUNCTION PdhGetDefaultPerfObjectHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize);
477  PDH_FUNCTION PdhGetDefaultPerfObjectHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize);
478  PDH_FUNCTION PdhGetDefaultPerfCounterHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize);
479  PDH_FUNCTION PdhGetDefaultPerfCounterHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize);
480  PDH_FUNCTION PdhBrowseCountersHW(PPDH_BROWSE_DLG_CONFIG_HW pBrowseDlgData);
481  PDH_FUNCTION PdhBrowseCountersHA(PPDH_BROWSE_DLG_CONFIG_HA pBrowseDlgData);
482  PDH_FUNCTION PdhVerifySQLDBW(LPCWSTR szDataSource);
483  PDH_FUNCTION PdhVerifySQLDBA(LPCSTR szDataSource);
484  PDH_FUNCTION PdhCreateSQLTablesW(LPCWSTR szDataSource);
485  PDH_FUNCTION PdhCreateSQLTablesA(LPCSTR szDataSource);
486  PDH_FUNCTION PdhEnumLogSetNamesW(LPCWSTR szDataSource,LPWSTR mszDataSetNameList,LPDWORD pcchBufferLength);
487  PDH_FUNCTION PdhEnumLogSetNamesA(LPCSTR szDataSource,LPSTR mszDataSetNameList,LPDWORD pcchBufferLength);
488  PDH_FUNCTION PdhGetLogSetGUID(PDH_HLOG hLog,GUID *pGuid,int *pRunId);
489  PDH_FUNCTION PdhSetLogSetRunID(PDH_HLOG hLog,int RunId);
490
491#if defined(UNICODE)
492#ifndef _UNICODE
493#define _UNICODE
494#endif
495#endif
496
497#if defined(_UNICODE)
498#if !defined(UNICODE)
499#define UNICODE
500#endif
501#endif
502
503#define PDH_COUNTER_INFO __MINGW_NAME_UAW(PDH_COUNTER_INFO)
504#define PPDH_COUNTER_INFO __MINGW_NAME_UAW(PPDH_COUNTER_INFO)
505#define PDH_COUNTER_PATH_ELEMENTS __MINGW_NAME_UAW(PDH_COUNTER_PATH_ELEMENTS)
506#define PPDH_COUNTER_PATH_ELEMENTS __MINGW_NAME_UAW(PPDH_COUNTER_PATH_ELEMENTS)
507#define PDH_BROWSE_DLG_CONFIG __MINGW_NAME_UAW(PDH_BROWSE_DLG_CONFIG)
508#define PPDH_BROWSE_DLG_CONFIG __MINGW_NAME_UAW(PPDH_BROWSE_DLG_CONFIG)
509#define PDH_FMT_COUNTERVALUE_ITEM __MINGW_NAME_UAW(PDH_FMT_COUNTERVALUE_ITEM)
510#define PPDH_FMT_COUNTERVALUE_ITEM __MINGW_NAME_UAW(PPDH_FMT_COUNTERVALUE_ITEM)
511#define PDH_RAW_COUNTER_ITEM __MINGW_NAME_UAW(PDH_RAW_COUNTER_ITEM)
512#define PPDH_RAW_COUNTER_ITEM __MINGW_NAME_UAW(PPDH_RAW_COUNTER_ITEM)
513#define PDH_LOG_SERVICE_QUERY_INFO __MINGW_NAME_UAW(PDH_LOG_SERVICE_QUERY_INFO)
514#define PPDH_LOG_SERVICE_QUERY_INFO __MINGW_NAME_UAW(PPDH_LOG_SERVICE_QUERY_INFO)
515
516#define PDH_BROWSE_DLG_CONFIG_H __MINGW_NAME_AW(PDH_BROWSE_DLG_CONFIG_H)
517#define PPDH_BROWSE_DLG_CONFIG_H __MINGW_NAME_AW(PPDH_BROWSE_DLG_CONFIG_H)
518
519#define PdhOpenQuery __MINGW_NAME_AW(PdhOpenQuery)
520#define PdhAddCounter __MINGW_NAME_AW(PdhAddCounter)
521#define PdhGetCounterInfo __MINGW_NAME_AW(PdhGetCounterInfo)
522#define PdhConnectMachine __MINGW_NAME_AW(PdhConnectMachine)
523#define PdhEnumMachines __MINGW_NAME_AW(PdhEnumMachines)
524#define PdhEnumObjects __MINGW_NAME_AW(PdhEnumObjects)
525#define PdhEnumObjectItems __MINGW_NAME_AW(PdhEnumObjectItems)
526#define PdhMakeCounterPath __MINGW_NAME_AW(PdhMakeCounterPath)
527#define PdhParseCounterPath __MINGW_NAME_AW(PdhParseCounterPath)
528#define PdhParseInstanceName __MINGW_NAME_AW(PdhParseInstanceName)
529#define PdhValidatePath __MINGW_NAME_AW(PdhValidatePath)
530#define PdhGetDefaultPerfObject __MINGW_NAME_AW(PdhGetDefaultPerfObject)
531#define PdhGetDefaultPerfCounter __MINGW_NAME_AW(PdhGetDefaultPerfCounter)
532#define PdhBrowseCounters __MINGW_NAME_AW(PdhBrowseCounters)
533#define PdhBrowseCountersH __MINGW_NAME_AW(PdhBrowseCountersH)
534#define PdhExpandCounterPath __MINGW_NAME_AW(PdhExpandCounterPath)
535#define PdhGetFormattedCounterArray __MINGW_NAME_AW(PdhGetFormattedCounterArray)
536#define PdhGetRawCounterArray __MINGW_NAME_AW(PdhGetRawCounterArray)
537#define PdhLookupPerfNameByIndex __MINGW_NAME_AW(PdhLookupPerfNameByIndex)
538#define PdhLookupPerfIndexByName __MINGW_NAME_AW(PdhLookupPerfIndexByName)
539#define PdhOpenLog __MINGW_NAME_AW(PdhOpenLog)
540#define PdhUpdateLog __MINGW_NAME_AW(PdhUpdateLog)
541#define PdhSelectDataSource __MINGW_NAME_AW(PdhSelectDataSource)
542#define PdhGetDataSourceTimeRange __MINGW_NAME_AW(PdhGetDataSourceTimeRange)
543#define PdhLogServiceControl __MINGW_NAME_AW(PdhLogServiceControl)
544#define PdhLogServiceQuery __MINGW_NAME_AW(PdhLogServiceQuery)
545#define PdhExpandWildCardPath __MINGW_NAME_AW(PdhExpandWildCardPath)
546#define PdhBindInputDataSource __MINGW_NAME_AW(PdhBindInputDataSource)
547#define PdhEnumMachinesH __MINGW_NAME_AW(PdhEnumMachinesH)
548#define PdhEnumObjectsH __MINGW_NAME_AW(PdhEnumObjectsH)
549#define PdhEnumObjectItemsH __MINGW_NAME_AW(PdhEnumObjectItemsH)
550#define PdhExpandWildCardPathH __MINGW_NAME_AW(PdhExpandWildCardPathH)
551#define PdhGetDefaultPerfObjectH __MINGW_NAME_AW(PdhGetDefaultPerfObjectH)
552#define PdhGetDefaultPerfCounterH __MINGW_NAME_AW(PdhGetDefaultPerfCounterH)
553#define PdhEnumLogSetNames __MINGW_NAME_AW(PdhEnumLogSetNames)
554#define PdhCreateSQLTables __MINGW_NAME_AW(PdhCreateSQLTables)
555#define PdhVerifySQLDB __MINGW_NAME_AW(PdhVerifySQLDB)
556
557#if (_WIN32_WINNT >= 0x0600)
558PDH_STATUS PdhAddEnglishCounterA(
559  PDH_HQUERY hQuery,
560  LPCSTR szFullCounterPath,
561  DWORD_PTR dwUserData,
562  PDH_HCOUNTER *phCounter
563);
564
565PDH_STATUS PdhAddEnglishCounterW(
566  PDH_HQUERY hQuery,
567  LPCWSTR szFullCounterPath,
568  DWORD_PTR dwUserData,
569  PDH_HCOUNTER *phCounter
570);
571
572#define PdhAddEnglishCounter __MINGW_NAME_AW(PdhAddEnglishCounter)
573
574PDH_STATUS PdhCollectQueryDataWithTime(
575  PDH_HQUERY hQuery,
576  LONGLONG *pllTimeStamp
577);
578
579PDH_STATUS PdhValidatePathExA(
580  PDH_HLOG hDataSource,
581  LPCSTR szFullPathBuffer
582);
583
584PDH_STATUS PdhValidatePathExA(
585  PDH_HLOG hDataSource,
586  LPCWSTR szFullPathBuffer
587);
588
589#define PdhValidatePathEx __MINGW_NAME_AW(PdhValidatePathEx)
590
591#endif /*(_WIN32_WINNT >= 0x0600)*/
592
593#ifdef __cplusplus
594}
595#endif
596#endif
597