diff fuhtark_test/include/winapi/pdh.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/pdh.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,615 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _PDH_H_
+#define _PDH_H_
+
+#include <windows.h>
+#include <winperf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  typedef LONG PDH_STATUS;
+
+#define PDH_FUNCTION PDH_STATUS WINAPI
+
+#define PDH_CVERSION_WIN40 ((DWORD)(0x0400))
+#define PDH_CVERSION_WIN50 ((DWORD)(0x0500))
+
+#define PDH_VERSION ((DWORD)((PDH_CVERSION_WIN50) + 0x0003))
+
+#define IsSuccessSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x00000000L) ? TRUE : FALSE)
+#define IsInformationalSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x40000000L) ? TRUE : FALSE)
+#define IsWarningSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x80000000L) ? TRUE : FALSE)
+#define IsErrorSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0xC0000000L) ? TRUE : FALSE)
+
+#define MAX_COUNTER_PATH 256
+
+#define PDH_MAX_COUNTER_NAME 1024
+#define PDH_MAX_INSTANCE_NAME 1024
+#define PDH_MAX_COUNTER_PATH 2048
+#define PDH_MAX_DATASOURCE_PATH 1024
+
+  typedef HANDLE PDH_HCOUNTER;
+  typedef HANDLE PDH_HQUERY;
+  typedef HANDLE PDH_HLOG;
+
+  typedef PDH_HCOUNTER HCOUNTER;
+  typedef PDH_HQUERY HQUERY;
+#ifndef _LMHLOGDEFINED_
+  typedef PDH_HLOG HLOG;
+#endif
+
+#ifdef INVALID_HANDLE_VALUE
+#undef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
+#endif
+
+#define H_REALTIME_DATASOURCE NULL
+#define H_WBEM_DATASOURCE INVALID_HANDLE_VALUE
+
+  typedef struct _PDH_RAW_COUNTER {
+    DWORD CStatus;
+    FILETIME TimeStamp;
+    LONGLONG FirstValue;
+    LONGLONG SecondValue;
+    DWORD MultiCount;
+  } PDH_RAW_COUNTER,*PPDH_RAW_COUNTER;
+
+  typedef struct _PDH_RAW_COUNTER_ITEM_A {
+    LPSTR szName;
+    PDH_RAW_COUNTER RawValue;
+  } PDH_RAW_COUNTER_ITEM_A,*PPDH_RAW_COUNTER_ITEM_A;
+
+  typedef struct _PDH_RAW_COUNTER_ITEM_W {
+    LPWSTR szName;
+    PDH_RAW_COUNTER RawValue;
+  } PDH_RAW_COUNTER_ITEM_W,*PPDH_RAW_COUNTER_ITEM_W;
+
+  typedef struct _PDH_FMT_COUNTERVALUE {
+    DWORD CStatus;
+    __MINGW_EXTENSION union {
+      LONG longValue;
+      double doubleValue;
+      LONGLONG largeValue;
+      LPCSTR AnsiStringValue;
+      LPCWSTR WideStringValue;
+    };
+  } PDH_FMT_COUNTERVALUE,*PPDH_FMT_COUNTERVALUE;
+
+  typedef struct _PDH_FMT_COUNTERVALUE_ITEM_A {
+    LPSTR szName;
+    PDH_FMT_COUNTERVALUE FmtValue;
+  } PDH_FMT_COUNTERVALUE_ITEM_A,*PPDH_FMT_COUNTERVALUE_ITEM_A;
+
+  typedef struct _PDH_FMT_COUNTERVALUE_ITEM_W {
+    LPWSTR szName;
+    PDH_FMT_COUNTERVALUE FmtValue;
+  } PDH_FMT_COUNTERVALUE_ITEM_W,*PPDH_FMT_COUNTERVALUE_ITEM_W;
+
+  typedef struct _PDH_STATISTICS {
+    DWORD dwFormat;
+    DWORD count;
+    PDH_FMT_COUNTERVALUE min;
+    PDH_FMT_COUNTERVALUE max;
+    PDH_FMT_COUNTERVALUE mean;
+  } PDH_STATISTICS,*PPDH_STATISTICS;
+
+  typedef struct _PDH_COUNTER_PATH_ELEMENTS_A {
+    LPSTR szMachineName;
+    LPSTR szObjectName;
+    LPSTR szInstanceName;
+    LPSTR szParentInstance;
+    DWORD dwInstanceIndex;
+    LPSTR szCounterName;
+  } PDH_COUNTER_PATH_ELEMENTS_A,*PPDH_COUNTER_PATH_ELEMENTS_A;
+
+  typedef struct _PDH_COUNTER_PATH_ELEMENTS_W {
+    LPWSTR szMachineName;
+    LPWSTR szObjectName;
+    LPWSTR szInstanceName;
+    LPWSTR szParentInstance;
+    DWORD dwInstanceIndex;
+    LPWSTR szCounterName;
+  } PDH_COUNTER_PATH_ELEMENTS_W,*PPDH_COUNTER_PATH_ELEMENTS_W;
+
+  typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A {
+    LPSTR szMachineName;
+    GUID ObjectGUID;
+    DWORD dwItemId;
+    LPSTR szInstanceName;
+  } PDH_DATA_ITEM_PATH_ELEMENTS_A,*PPDH_DATA_ITEM_PATH_ELEMENTS_A;
+
+  typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W {
+    LPWSTR szMachineName;
+    GUID ObjectGUID;
+    DWORD dwItemId;
+    LPWSTR szInstanceName;
+  } PDH_DATA_ITEM_PATH_ELEMENTS_W,*PPDH_DATA_ITEM_PATH_ELEMENTS_W;
+
+  typedef struct _PDH_COUNTER_INFO_A {
+    DWORD dwLength;
+    DWORD dwType;
+    DWORD CVersion;
+    DWORD CStatus;
+    LONG lScale;
+    LONG lDefaultScale;
+    DWORD_PTR dwUserData;
+    DWORD_PTR dwQueryUserData;
+    LPSTR szFullPath;
+    __MINGW_EXTENSION union {
+      PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
+      PDH_COUNTER_PATH_ELEMENTS_A CounterPath;
+      __MINGW_EXTENSION struct {
+	LPSTR szMachineName;
+	LPSTR szObjectName;
+	LPSTR szInstanceName;
+	LPSTR szParentInstance;
+	DWORD dwInstanceIndex;
+	LPSTR szCounterName;
+      };
+    };
+    LPSTR szExplainText;
+    DWORD DataBuffer[1];
+  } PDH_COUNTER_INFO_A,*PPDH_COUNTER_INFO_A;
+
+  typedef struct _PDH_COUNTER_INFO_W {
+    DWORD dwLength;
+    DWORD dwType;
+    DWORD CVersion;
+    DWORD CStatus;
+    LONG lScale;
+    LONG lDefaultScale;
+    DWORD_PTR dwUserData;
+    DWORD_PTR dwQueryUserData;
+    LPWSTR szFullPath;
+    __MINGW_EXTENSION union {
+      PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
+      PDH_COUNTER_PATH_ELEMENTS_W CounterPath;
+      __MINGW_EXTENSION struct {
+	LPWSTR szMachineName;
+	LPWSTR szObjectName;
+	LPWSTR szInstanceName;
+	LPWSTR szParentInstance;
+	DWORD dwInstanceIndex;
+	LPWSTR szCounterName;
+      };
+    };
+    LPWSTR szExplainText;
+    DWORD DataBuffer[1];
+  } PDH_COUNTER_INFO_W,*PPDH_COUNTER_INFO_W;
+
+  typedef struct _PDH_TIME_INFO {
+    LONGLONG StartTime;
+    LONGLONG EndTime;
+    DWORD SampleCount;
+  } PDH_TIME_INFO,*PPDH_TIME_INFO;
+
+  typedef struct _PDH_RAW_LOG_RECORD {
+    DWORD dwStructureSize;
+    DWORD dwRecordType;
+    DWORD dwItems;
+    UCHAR RawBytes[1];
+  } PDH_RAW_LOG_RECORD,*PPDH_RAW_LOG_RECORD;
+
+  typedef struct _PDH_LOG_SERVICE_QUERY_INFO_A {
+    DWORD dwSize;
+    DWORD dwFlags;
+    DWORD dwLogQuota;
+    LPSTR szLogFileCaption;
+    LPSTR szDefaultDir;
+    LPSTR szBaseFileName;
+    DWORD dwFileType;
+    DWORD dwReserved;
+    __MINGW_EXTENSION union {
+      __MINGW_EXTENSION struct {
+	DWORD PdlAutoNameInterval;
+	DWORD PdlAutoNameUnits;
+	LPSTR PdlCommandFilename;
+	LPSTR PdlCounterList;
+	DWORD PdlAutoNameFormat;
+	DWORD PdlSampleInterval;
+	FILETIME PdlLogStartTime;
+	FILETIME PdlLogEndTime;
+      };
+      __MINGW_EXTENSION struct {
+	DWORD TlNumberOfBuffers;
+	DWORD TlMinimumBuffers;
+	DWORD TlMaximumBuffers;
+	DWORD TlFreeBuffers;
+	DWORD TlBufferSize;
+	DWORD TlEventsLost;
+	DWORD TlLoggerThreadId;
+	DWORD TlBuffersWritten;
+	DWORD TlLogHandle;
+	LPSTR TlLogFileName;
+      };
+    };
+  } PDH_LOG_SERVICE_QUERY_INFO_A,*PPDH_LOG_SERVICE_QUERY_INFO_A;
+
+  typedef struct _PDH_LOG_SERVICE_QUERY_INFO_W {
+    DWORD dwSize;
+    DWORD dwFlags;
+    DWORD dwLogQuota;
+    LPWSTR szLogFileCaption;
+    LPWSTR szDefaultDir;
+    LPWSTR szBaseFileName;
+    DWORD dwFileType;
+    DWORD dwReserved;
+    __MINGW_EXTENSION union {
+      __MINGW_EXTENSION struct {
+	DWORD PdlAutoNameInterval;
+	DWORD PdlAutoNameUnits;
+	LPWSTR PdlCommandFilename;
+	LPWSTR PdlCounterList;
+	DWORD PdlAutoNameFormat;
+	DWORD PdlSampleInterval;
+	FILETIME PdlLogStartTime;
+	FILETIME PdlLogEndTime;
+      };
+      __MINGW_EXTENSION struct {
+	DWORD TlNumberOfBuffers;
+	DWORD TlMinimumBuffers;
+	DWORD TlMaximumBuffers;
+	DWORD TlFreeBuffers;
+	DWORD TlBufferSize;
+	DWORD TlEventsLost;
+	DWORD TlLoggerThreadId;
+	DWORD TlBuffersWritten;
+	DWORD TlLogHandle;
+	LPWSTR TlLogFileName;
+      };
+    };
+  } PDH_LOG_SERVICE_QUERY_INFO_W,*PPDH_LOG_SERVICE_QUERY_INFO_W;
+
+#define MAX_TIME_VALUE ((LONGLONG) 0x7FFFFFFFFFFFFFFF)
+#define MIN_TIME_VALUE ((LONGLONG) 0)
+
+  PDH_FUNCTION PdhGetDllVersion(LPDWORD lpdwVersion);
+  PDH_FUNCTION PdhOpenQueryW(LPCWSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
+  PDH_FUNCTION PdhOpenQueryA(LPCSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
+  PDH_FUNCTION PdhAddCounterW(PDH_HQUERY hQuery,LPCWSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
+  PDH_FUNCTION PdhAddCounterA(PDH_HQUERY hQuery,LPCSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter);
+  PDH_FUNCTION PdhRemoveCounter(PDH_HCOUNTER hCounter);
+  PDH_FUNCTION PdhCollectQueryData(PDH_HQUERY hQuery);
+  PDH_FUNCTION PdhCloseQuery(PDH_HQUERY hQuery);
+  PDH_FUNCTION PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwType,PPDH_FMT_COUNTERVALUE pValue);
+  PDH_FUNCTION PdhGetFormattedCounterArrayA(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_A ItemBuffer);
+  PDH_FUNCTION PdhGetFormattedCounterArrayW(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_W ItemBuffer);
+
+#define PDH_FMT_RAW ((DWORD) 0x00000010)
+#define PDH_FMT_ANSI ((DWORD) 0x00000020)
+#define PDH_FMT_UNICODE ((DWORD) 0x00000040)
+#define PDH_FMT_LONG ((DWORD) 0x00000100)
+#define PDH_FMT_DOUBLE ((DWORD) 0x00000200)
+#define PDH_FMT_LARGE ((DWORD) 0x00000400)
+#define PDH_FMT_NOSCALE ((DWORD) 0x00001000)
+#define PDH_FMT_1000 ((DWORD) 0x00002000)
+#define PDH_FMT_NODATA ((DWORD) 0x00004000)
+#define PDH_FMT_NOCAP100 ((DWORD) 0x00008000)
+#define PERF_DETAIL_COSTLY ((DWORD) 0x00010000)
+#define PERF_DETAIL_STANDARD ((DWORD) 0x0000FFFF)
+
+  PDH_FUNCTION PdhGetRawCounterValue(PDH_HCOUNTER hCounter,LPDWORD lpdwType,PPDH_RAW_COUNTER pValue);
+  PDH_FUNCTION PdhGetRawCounterArrayA(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_A ItemBuffer);
+  PDH_FUNCTION PdhGetRawCounterArrayW(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_W ItemBuffer);
+  PDH_FUNCTION PdhCalculateCounterFromRawValue(PDH_HCOUNTER hCounter,DWORD dwFormat,PPDH_RAW_COUNTER rawValue1,PPDH_RAW_COUNTER rawValue2,PPDH_FMT_COUNTERVALUE fmtValue);
+  PDH_FUNCTION PdhComputeCounterStatistics(PDH_HCOUNTER hCounter,DWORD dwFormat,DWORD dwFirstEntry,DWORD dwNumEntries,PPDH_RAW_COUNTER lpRawValueArray,PPDH_STATISTICS data);
+  PDH_FUNCTION PdhGetCounterInfoW(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_W lpBuffer);
+  PDH_FUNCTION PdhGetCounterInfoA(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_A lpBuffer);
+
+#define PDH_MAX_SCALE (7L)
+#define PDH_MIN_SCALE (-7L)
+
+  PDH_FUNCTION PdhSetCounterScaleFactor(PDH_HCOUNTER hCounter,LONG lFactor);
+  PDH_FUNCTION PdhConnectMachineW(LPCWSTR szMachineName);
+  PDH_FUNCTION PdhConnectMachineA(LPCSTR szMachineName);
+  PDH_FUNCTION PdhEnumMachinesW(LPCWSTR szDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhEnumMachinesA(LPCSTR szDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhEnumObjectsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
+  PDH_FUNCTION PdhEnumObjectsA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
+  PDH_FUNCTION PdhEnumObjectItemsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
+  PDH_FUNCTION PdhEnumObjectItemsA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
+
+#define PDH_OBJECT_HAS_INSTANCES ((DWORD) 0x00000001)
+
+  PDH_FUNCTION PdhMakeCounterPathW(PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPWSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags);
+  PDH_FUNCTION PdhMakeCounterPathA(PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags);
+  PDH_FUNCTION PdhParseCounterPathW(LPCWSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags);
+  PDH_FUNCTION PdhParseCounterPathA(LPCSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags);
+
+#define PDH_PATH_WBEM_RESULT ((DWORD) 0x00000001)
+#define PDH_PATH_WBEM_INPUT ((DWORD) 0x00000002)
+
+#define PDH_PATH_LANG_FLAGS(LangId,Flags) ((DWORD)(((LangId & 0x0000FFFF) << 16) | (Flags & 0x0000FFFF)))
+
+  PDH_FUNCTION PdhParseInstanceNameW(LPCWSTR szInstanceString,LPWSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPWSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex);
+  PDH_FUNCTION PdhParseInstanceNameA(LPCSTR szInstanceString,LPSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex);
+  PDH_FUNCTION PdhValidatePathW(LPCWSTR szFullPathBuffer);
+  PDH_FUNCTION PdhValidatePathA(LPCSTR szFullPathBuffer);
+  PDH_FUNCTION PdhGetDefaultPerfObjectW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfObjectA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfCounterW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfCounterA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize);
+
+  typedef PDH_STATUS (WINAPI *CounterPathCallBack)(DWORD_PTR);
+
+  typedef struct _BrowseDlgConfig_HW {
+    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved : 22;
+    HWND hWndOwner;
+    PDH_HLOG hDataSource;
+    LPWSTR szReturnPathBuffer;
+    DWORD cchReturnPathLength;
+    CounterPathCallBack pCallBack;
+    DWORD_PTR dwCallBackArg;
+    PDH_STATUS CallBackStatus;
+    DWORD dwDefaultDetailLevel;
+    LPWSTR szDialogBoxCaption;
+  } PDH_BROWSE_DLG_CONFIG_HW,*PPDH_BROWSE_DLG_CONFIG_HW;
+
+  typedef struct _BrowseDlgConfig_HA {
+    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
+    HWND hWndOwner;
+    PDH_HLOG hDataSource;
+    LPSTR szReturnPathBuffer;
+    DWORD cchReturnPathLength;
+    CounterPathCallBack pCallBack;
+    DWORD_PTR dwCallBackArg;
+    PDH_STATUS CallBackStatus;
+    DWORD dwDefaultDetailLevel;
+    LPSTR szDialogBoxCaption;
+  } PDH_BROWSE_DLG_CONFIG_HA,*PPDH_BROWSE_DLG_CONFIG_HA;
+
+  typedef struct _BrowseDlgConfig_W {
+    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
+    HWND hWndOwner;
+    LPWSTR szDataSource;
+    LPWSTR szReturnPathBuffer;
+    DWORD cchReturnPathLength;
+    CounterPathCallBack pCallBack;
+    DWORD_PTR dwCallBackArg;
+    PDH_STATUS CallBackStatus;
+    DWORD dwDefaultDetailLevel;
+    LPWSTR szDialogBoxCaption;
+  } PDH_BROWSE_DLG_CONFIG_W,*PPDH_BROWSE_DLG_CONFIG_W;
+
+  typedef struct _BrowseDlgConfig_A {
+    DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22;
+    HWND hWndOwner;
+    LPSTR szDataSource;
+    LPSTR szReturnPathBuffer;
+    DWORD cchReturnPathLength;
+    CounterPathCallBack pCallBack;
+    DWORD_PTR dwCallBackArg;
+    PDH_STATUS CallBackStatus;
+    DWORD dwDefaultDetailLevel;
+    LPSTR szDialogBoxCaption;
+  } PDH_BROWSE_DLG_CONFIG_A,*PPDH_BROWSE_DLG_CONFIG_A;
+
+  PDH_FUNCTION PdhBrowseCountersW(PPDH_BROWSE_DLG_CONFIG_W pBrowseDlgData);
+  PDH_FUNCTION PdhBrowseCountersA(PPDH_BROWSE_DLG_CONFIG_A pBrowseDlgData);
+  PDH_FUNCTION PdhExpandCounterPathW(LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength);
+  PDH_FUNCTION PdhExpandCounterPathA(LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength);
+  PDH_FUNCTION PdhLookupPerfNameByIndexW(LPCWSTR szMachineName,DWORD dwNameIndex,LPWSTR szNameBuffer,LPDWORD pcchNameBufferSize);
+  PDH_FUNCTION PdhLookupPerfNameByIndexA(LPCSTR szMachineName,DWORD dwNameIndex,LPSTR szNameBuffer,LPDWORD pcchNameBufferSize);
+  PDH_FUNCTION PdhLookupPerfIndexByNameW(LPCWSTR szMachineName,LPCWSTR szNameBuffer,LPDWORD pdwIndex);
+  PDH_FUNCTION PdhLookupPerfIndexByNameA(LPCSTR szMachineName,LPCSTR szNameBuffer,LPDWORD pdwIndex);
+
+#define PDH_NOEXPANDCOUNTERS 1
+#define PDH_NOEXPANDINSTANCES 2
+#define PDH_REFRESHCOUNTERS 4
+
+  PDH_FUNCTION PdhExpandWildCardPathA(LPCSTR szDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
+  PDH_FUNCTION PdhExpandWildCardPathW(LPCWSTR szDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
+
+#define PDH_LOG_READ_ACCESS ((DWORD) 0x00010000)
+#define PDH_LOG_WRITE_ACCESS ((DWORD) 0x00020000)
+#define PDH_LOG_UPDATE_ACCESS ((DWORD) 0x00040000)
+#define PDH_LOG_ACCESS_MASK ((DWORD) 0x000F0000)
+
+#define PDH_LOG_CREATE_NEW ((DWORD) 0x00000001)
+#define PDH_LOG_CREATE_ALWAYS ((DWORD) 0x00000002)
+#define PDH_LOG_OPEN_ALWAYS ((DWORD) 0x00000003)
+#define PDH_LOG_OPEN_EXISTING ((DWORD) 0x00000004)
+#define PDH_LOG_CREATE_MASK ((DWORD) 0x0000000F)
+
+#define PDH_LOG_OPT_USER_STRING ((DWORD) 0x01000000)
+#define PDH_LOG_OPT_CIRCULAR ((DWORD) 0x02000000)
+#define PDH_LOG_OPT_MAX_IS_BYTES ((DWORD) 0x04000000)
+#define PDH_LOG_OPT_APPEND ((DWORD) 0x08000000)
+#define PDH_LOG_OPT_MASK ((DWORD) 0x0F000000)
+
+#define PDH_LOG_TYPE_UNDEFINED 0
+#define PDH_LOG_TYPE_CSV 1
+#define PDH_LOG_TYPE_TSV 2
+
+#define PDH_LOG_TYPE_TRACE_KERNEL 4
+#define PDH_LOG_TYPE_TRACE_GENERIC 5
+#define PDH_LOG_TYPE_PERFMON 6
+#define PDH_LOG_TYPE_SQL 7
+#define PDH_LOG_TYPE_BINARY 8
+
+  PDH_FUNCTION PdhOpenLogW(LPCWSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCWSTR szUserCaption,PDH_HLOG *phLog);
+  PDH_FUNCTION PdhOpenLogA(LPCSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCSTR szUserCaption,PDH_HLOG *phLog);
+  PDH_FUNCTION PdhUpdateLogW(PDH_HLOG hLog,LPCWSTR szUserString);
+  PDH_FUNCTION PdhUpdateLogA(PDH_HLOG hLog,LPCSTR szUserString);
+  PDH_FUNCTION PdhUpdateLogFileCatalog(PDH_HLOG hLog);
+  PDH_FUNCTION PdhGetLogFileSize(PDH_HLOG hLog,LONGLONG *llSize);
+  PDH_FUNCTION PdhCloseLog(PDH_HLOG hLog,DWORD dwFlags);
+
+#define PDH_FLAGS_CLOSE_QUERY ((DWORD) 0x00000001)
+#define PDH_FLAGS_FILE_BROWSER_ONLY ((DWORD) 0x00000001)
+
+  PDH_FUNCTION PdhSelectDataSourceW(HWND hWndOwner,DWORD dwFlags,LPWSTR szDataSource,LPDWORD pcchBufferLength);
+  PDH_FUNCTION PdhSelectDataSourceA(HWND hWndOwner,DWORD dwFlags,LPSTR szDataSource,LPDWORD pcchBufferLength);
+  WINBOOL PdhIsRealTimeQuery(PDH_HQUERY hQuery);
+  PDH_FUNCTION PdhSetQueryTimeRange(PDH_HQUERY hQuery,PPDH_TIME_INFO pInfo);
+  PDH_FUNCTION PdhGetDataSourceTimeRangeW(LPCWSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize);
+  PDH_FUNCTION PdhGetDataSourceTimeRangeA(LPCSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD dwBufferSize);
+  PDH_FUNCTION PdhCollectQueryDataEx(PDH_HQUERY hQuery,DWORD dwIntervalTime,HANDLE hNewDataEvent);
+  PDH_FUNCTION PdhFormatFromRawValue(DWORD dwCounterType,DWORD dwFormat,LONGLONG *pTimeBase,PPDH_RAW_COUNTER pRawValue1,PPDH_RAW_COUNTER pRawValue2,PPDH_FMT_COUNTERVALUE pFmtValue);
+  PDH_FUNCTION PdhGetCounterTimeBase(PDH_HCOUNTER hCounter,LONGLONG *pTimeBase);
+  PDH_FUNCTION PdhReadRawLogRecord(PDH_HLOG hLog,FILETIME ftRecord,PPDH_RAW_LOG_RECORD pRawLogRecord,LPDWORD pdwBufferLength);
+
+#define DATA_SOURCE_REGISTRY ((DWORD) 0x00000001)
+#define DATA_SOURCE_LOGFILE ((DWORD) 0x00000002)
+#define DATA_SOURCE_WBEM ((DWORD) 0x00000004)
+
+  PDH_FUNCTION PdhSetDefaultRealTimeDataSource(DWORD dwDataSourceId);
+  PDH_FUNCTION PdhBindInputDataSourceW(PDH_HLOG *phDataSource,LPCWSTR LogFileNameList);
+  PDH_FUNCTION PdhBindInputDataSourceA(PDH_HLOG *phDataSource,LPCSTR LogFileNameList);
+  PDH_FUNCTION PdhOpenQueryH(PDH_HLOG hDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery);
+  PDH_FUNCTION PdhEnumMachinesHW(PDH_HLOG hDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhEnumMachinesHA(PDH_HLOG hDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhEnumObjectsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
+  PDH_FUNCTION PdhEnumObjectsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh);
+  PDH_FUNCTION PdhEnumObjectItemsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
+  PDH_FUNCTION PdhEnumObjectItemsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags);
+  PDH_FUNCTION PdhExpandWildCardPathHW(PDH_HLOG hDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
+  PDH_FUNCTION PdhExpandWildCardPathHA(PDH_HLOG hDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags);
+  PDH_FUNCTION PdhGetDataSourceTimeRangeH(PDH_HLOG hDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfObjectHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfObjectHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfCounterHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhGetDefaultPerfCounterHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize);
+  PDH_FUNCTION PdhBrowseCountersHW(PPDH_BROWSE_DLG_CONFIG_HW pBrowseDlgData);
+  PDH_FUNCTION PdhBrowseCountersHA(PPDH_BROWSE_DLG_CONFIG_HA pBrowseDlgData);
+  PDH_FUNCTION PdhVerifySQLDBW(LPCWSTR szDataSource);
+  PDH_FUNCTION PdhVerifySQLDBA(LPCSTR szDataSource);
+  PDH_FUNCTION PdhCreateSQLTablesW(LPCWSTR szDataSource);
+  PDH_FUNCTION PdhCreateSQLTablesA(LPCSTR szDataSource);
+  PDH_FUNCTION PdhEnumLogSetNamesW(LPCWSTR szDataSource,LPWSTR mszDataSetNameList,LPDWORD pcchBufferLength);
+  PDH_FUNCTION PdhEnumLogSetNamesA(LPCSTR szDataSource,LPSTR mszDataSetNameList,LPDWORD pcchBufferLength);
+  PDH_FUNCTION PdhGetLogSetGUID(PDH_HLOG hLog,GUID *pGuid,int *pRunId);
+  PDH_FUNCTION PdhSetLogSetRunID(PDH_HLOG hLog,int RunId);
+
+#ifdef UNICODE
+#ifndef _UNICODE
+#define _UNICODE
+#endif
+#endif
+
+#ifdef _UNICODE
+#ifndef UNICODE
+#define UNICODE
+#endif
+#endif
+
+#ifdef UNICODE
+
+#define PdhOpenQuery PdhOpenQueryW
+#define PdhAddCounter PdhAddCounterW
+#define PdhGetCounterInfo PdhGetCounterInfoW
+#define PDH_COUNTER_INFO PDH_COUNTER_INFO_W
+#define PPDH_COUNTER_INFO PPDH_COUNTER_INFO_W
+#define PdhConnectMachine PdhConnectMachineW
+#define PdhEnumMachines PdhEnumMachinesW
+#define PdhEnumObjects PdhEnumObjectsW
+#define PdhEnumObjectItems PdhEnumObjectItemsW
+#define PdhMakeCounterPath PdhMakeCounterPathW
+#define PDH_COUNTER_PATH_ELEMENTS PDH_COUNTER_PATH_ELEMENTS_W
+#define PPDH_COUNTER_PATH_ELEMENTS PPDH_COUNTER_PATH_ELEMENTS_W
+#define PdhParseCounterPath PdhParseCounterPathW
+#define PdhParseInstanceName PdhParseInstanceNameW
+#define PdhValidatePath PdhValidatePathW
+#define PdhGetDefaultPerfObject PdhGetDefaultPerfObjectW
+#define PdhGetDefaultPerfCounter PdhGetDefaultPerfCounterW
+#define PdhBrowseCounters PdhBrowseCountersW
+#define PdhBrowseCountersH PdhBrowseCountersHW
+#define PDH_BROWSE_DLG_CONFIG PDH_BROWSE_DLG_CONFIG_W
+#define PPDH_BROWSE_DLG_CONFIG PPDH_BROWSE_DLG_CONFIG_W
+#define PDH_BROWSE_DLG_CONFIG_H PDH_BROWSE_DLG_CONFIG_HW
+#define PPDH_BROWSE_DLG_CONFIG_H PPDH_BROWSE_DLG_CONFIG_HW
+#define PdhExpandCounterPath PdhExpandCounterPathW
+
+#define PDH_FMT_COUNTERVALUE_ITEM PDH_FMT_COUNTERVALUE_ITEM_W
+#define PPDH_FMT_COUNTERVALUE_ITEM PPDH_FMT_COUNTERVALUE_ITEM_W
+#define PDH_RAW_COUNTER_ITEM PDH_RAW_COUNTER_ITEM_W
+#define PPDH_RAW_COUNTER_ITEM PPDH_RAW_COUNTER_ITEM_W
+#define PdhGetFormattedCounterArray PdhGetFormattedCounterArrayW
+#define PdhGetRawCounterArray PdhGetRawCounterArrayW
+#define PdhLookupPerfNameByIndex PdhLookupPerfNameByIndexW
+#define PdhLookupPerfIndexByName PdhLookupPerfIndexByNameW
+#define PdhOpenLog PdhOpenLogW
+#define PdhUpdateLog PdhUpdateLogW
+#define PdhSelectDataSource PdhSelectDataSourceW
+#define PdhGetDataSourceTimeRange PdhGetDataSourceTimeRangeW
+#define PDH_LOG_SERVICE_QUERY_INFO PDH_LOG_SERVICE_QUERY_INFO_W
+#define PPDH_LOG_SERVICE_QUERY_INFO PPDH_LOG_SERVICE_QUERY_INFO_W
+#define PdhLogServiceControl PdhLogServiceControlW
+#define PdhLogServiceQuery PdhLogServiceQueryW
+#define PdhExpandWildCardPath PdhExpandWildCardPathW
+#define PdhBindInputDataSource PdhBindInputDataSourceW
+#define PdhEnumMachinesH PdhEnumMachinesHW
+#define PdhEnumObjectsH PdhEnumObjectsHW
+#define PdhEnumObjectItemsH PdhEnumObjectItemsHW
+#define PdhExpandWildCardPathH PdhExpandWildCardPathHW
+#define PdhGetDefaultPerfObjectH PdhGetDefaultPerfObjectHW
+#define PdhGetDefaultPerfCounterH PdhGetDefaultPerfCounterHW
+#define PdhEnumLogSetNames PdhEnumLogSetNamesW
+#define PdhCreateSQLTables PdhCreateSQLTablesW
+#define PdhVerifySQLDB PdhVerifySQLDBW
+#else
+
+#define PdhOpenQuery PdhOpenQueryA
+#define PdhAddCounter PdhAddCounterA
+#define PdhGetCounterInfo PdhGetCounterInfoA
+#define PDH_COUNTER_INFO PDH_COUNTER_INFO_A
+#define PPDH_COUNTER_INFO PPDH_COUNTER_INFO_A
+#define PdhConnectMachine PdhConnectMachineA
+#define PdhEnumMachines PdhEnumMachinesA
+#define PdhEnumObjects PdhEnumObjectsA
+#define PdhEnumObjectItems PdhEnumObjectItemsA
+#define PdhMakeCounterPath PdhMakeCounterPathA
+#define PDH_COUNTER_PATH_ELEMENTS PDH_COUNTER_PATH_ELEMENTS_A
+#define PPDH_COUNTER_PATH_ELEMENTS PPDH_COUNTER_PATH_ELEMENTS_A
+#define PdhParseCounterPath PdhParseCounterPathA
+#define PdhParseInstanceName PdhParseInstanceNameA
+#define PdhValidatePath PdhValidatePathA
+#define PdhGetDefaultPerfObject PdhGetDefaultPerfObjectA
+#define PdhGetDefaultPerfCounter PdhGetDefaultPerfCounterA
+#define PdhBrowseCounters PdhBrowseCountersA
+#define PdhBrowseCountersH PdhBrowseCountersHA
+#define PDH_BROWSE_DLG_CONFIG PDH_BROWSE_DLG_CONFIG_A
+#define PPDH_BROWSE_DLG_CONFIG PPDH_BROWSE_DLG_CONFIG_A
+#define PDH_BROWSE_DLG_CONFIG_H PDH_BROWSE_DLG_CONFIG_HA
+#define PPDH_BROWSE_DLG_CONFIG_H PPDH_BROWSE_DLG_CONFIG_HA
+#define PdhExpandCounterPath PdhExpandCounterPathA
+
+#define PDH_FMT_COUNTERVALUE_ITEM PDH_FMT_COUNTERVALUE_ITEM_A
+#define PPDH_FMT_COUNTERVALUE_ITEM PPDH_FMT_COUNTERVALUE_ITEM_A
+#define PDH_RAW_COUNTER_ITEM PDH_RAW_COUNTER_ITEM_A
+#define PPDH_RAW_COUNTER_ITEM PPDH_RAW_COUNTER_ITEM_A
+#define PdhGetFormattedCounterArray PdhGetFormattedCounterArrayA
+#define PdhGetRawCounterArray PdhGetRawCounterArrayA
+#define PdhLookupPerfNameByIndex PdhLookupPerfNameByIndexA
+#define PdhLookupPerfIndexByName PdhLookupPerfIndexByNameA
+#define PdhOpenLog PdhOpenLogA
+#define PdhUpdateLog PdhUpdateLogA
+#define PdhSelectDataSource PdhSelectDataSourceA
+#define PdhGetDataSourceTimeRange PdhGetDataSourceTimeRangeA
+#define PDH_LOG_SERVICE_QUERY_INFO PDH_LOG_SERVICE_QUERY_INFO_A
+#define PPDH_LOG_SERVICE_QUERY_INFO PPDH_LOG_SERVICE_QUERY_INFO_A
+#define PdhLogServiceControl PdhLogServiceControlA
+#define PdhLogServiceQuery PdhLogServiceQueryA
+#define PdhExpandWildCardPath PdhExpandWildCardPathA
+#define PdhBindInputDataSource PdhBindInputDataSourceA
+#define PdhEnumMachinesH PdhEnumMachinesHA
+#define PdhEnumObjectsH PdhEnumObjectsHA
+#define PdhEnumObjectItemsH PdhEnumObjectItemsHA
+#define PdhExpandWildCardPathH PdhExpandWildCardPathHA
+#define PdhGetDefaultPerfObjectH PdhGetDefaultPerfObjectHA
+#define PdhGetDefaultPerfCounterH PdhGetDefaultPerfCounterHA
+#define PdhEnumLogSetNames PdhEnumLogSetNamesA
+#define PdhCreateSQLTables PdhCreateSQLTablesA
+#define PdhVerifySQLDB PdhVerifySQLDBA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif