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
14 extern "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)
558 PDH_FUNCTION PdhAddEnglishCounterW(PDH_HQUERY hQuery,LPCWSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
559 PDH_FUNCTION PdhAddEnglishCounterA(PDH_HQUERY hQuery,LPCSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
560 
561 #define PdhAddEnglishCounter __MINGW_NAME_AW(PdhAddEnglishCounter)
562 
563 PDH_FUNCTION PdhCollectQueryDataWithTime(PDH_HQUERY hQuery,LONGLONG *pllTimeStamp);
564 
565 PDH_FUNCTION PdhValidatePathExW(PDH_HLOG hDataSource,LPCWSTR szFullPathBuffer);
566 PDH_FUNCTION PdhValidatePathExA(PDH_HLOG hDataSource,LPCSTR szFullPathBuffer);
567 
568 #define PdhValidatePathEx __MINGW_NAME_AW(PdhValidatePathEx)
569 
570 #endif /*(_WIN32_WINNT >= 0x0600)*/
571 
572 #ifdef __cplusplus
573 }
574 #endif
575 #endif
576