Home | History | Annotate | Download | only in include
      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_STATUS PdhAddEnglishCounterA(
    559   PDH_HQUERY hQuery,
    560   LPCSTR szFullCounterPath,
    561   DWORD_PTR dwUserData,
    562   PDH_HCOUNTER *phCounter
    563 );
    564 
    565 PDH_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 
    574 PDH_STATUS PdhCollectQueryDataWithTime(
    575   PDH_HQUERY hQuery,
    576   LONGLONG *pllTimeStamp
    577 );
    578 
    579 PDH_STATUS PdhValidatePathExA(
    580   PDH_HLOG hDataSource,
    581   LPCSTR szFullPathBuffer
    582 );
    583 
    584 PDH_STATUS PdhValidatePathExW(
    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