home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Compilers / digital marsC compier / dm / include / win32 / Pdh.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-08  |  15.9 KB  |  573 lines

  1. /*++
  2.  
  3. Copyright (C) 1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     PDH.H
  8.  
  9. Abstract:
  10.  
  11.     Header file for the Performance Data Helper (PDH) DLL functions.
  12.  
  13. --*/
  14. #ifndef _PDH_H_
  15. #define _PDH_H_
  16.  
  17. // system include files required for datatype and constant definitions 
  18. #include <windows.h>    // necessary for data types used in this file
  19. #include <winperf.h>    // necessary for the Detail Level definitions
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. typedef LONG            PDH_STATUS;
  26.  
  27. #define PDH_FUNCTION    PDH_STATUS __stdcall 
  28.  
  29. // version info
  30. #define PDH_CVERSION_WIN40  0x0400
  31. #define PDH_VERSION         PDH_CVERSION_WIN40
  32.  
  33. // define severity masks
  34. #define IsSuccessSeverity(ErrorCode)    \
  35.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x00000000L) ? TRUE : FALSE)
  36. #define IsInformationalSeverity(ErrorCode)    \
  37.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x40000000L) ? TRUE : FALSE)
  38. #define IsWarningSeverity(ErrorCode)    \
  39.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x80000000L) ? TRUE : FALSE)
  40. #define IsErrorSeverity(ErrorCode)      \
  41.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0xC0000000L) ? TRUE : FALSE)
  42.  
  43. // data type definitions
  44.  
  45. typedef HANDLE  HCOUNTER;
  46. typedef HANDLE  HQUERY;
  47.  
  48. typedef struct _PDH_RAW_COUNTER {
  49.     DWORD       CStatus;
  50.     FILETIME    TimeStamp;
  51.     LONGLONG    FirstValue;
  52.     LONGLONG    SecondValue;
  53.     DWORD       MultiCount;
  54. } PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;
  55.  
  56. typedef struct _PDH_FMT_COUNTERVALUE {
  57.     DWORD    CStatus;
  58.     union {
  59.         LONG        longValue;
  60.         double      doubleValue;
  61.         LONGLONG    largeValue;
  62.     };
  63. } PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
  64.  
  65. typedef struct _PDH_STATISTICS {
  66.     DWORD                   dwFormat;
  67.     DWORD                   count;
  68.     PDH_FMT_COUNTERVALUE    min;
  69.     PDH_FMT_COUNTERVALUE    max;
  70.     PDH_FMT_COUNTERVALUE    mean;
  71. } PDH_STATISTICS, *PPDH_STATISTICS;
  72.  
  73. typedef struct _PDH_COUNTER_PATH_ELEMENTS_A {
  74.     LPSTR   szMachineName;
  75.     LPSTR   szObjectName;
  76.     LPSTR   szInstanceName;
  77.     LPSTR   szParentInstance;
  78.     DWORD   dwInstanceIndex;
  79.     LPSTR   szCounterName;
  80. } PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;
  81.  
  82. typedef struct _PDH_COUNTER_PATH_ELEMENTS_W {
  83.     LPWSTR  szMachineName;
  84.     LPWSTR  szObjectName;
  85.     LPWSTR  szInstanceName;
  86.     LPWSTR  szParentInstance;
  87.     DWORD   dwInstanceIndex;
  88.     LPWSTR  szCounterName;
  89. } PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;
  90.  
  91. typedef struct _PDH_COUNTER_INFO_A {
  92.     DWORD   dwLength;
  93.     DWORD   dwType;
  94.     DWORD   CVersion;
  95.     DWORD   CStatus;
  96.     LONG    lScale;
  97.     LONG    lDefaultScale;
  98.     DWORD   dwUserData;
  99.     DWORD   dwQueryUserData;
  100.     LPSTR   szFullPath;
  101.     union   {
  102.         PDH_COUNTER_PATH_ELEMENTS_A CounterPath;
  103.         struct {
  104.             LPSTR   szMachineName;
  105.             LPSTR   szObjectName;
  106.             LPSTR   szInstanceName;
  107.             LPSTR   szParentInstance;
  108.             DWORD   dwInstanceIndex;
  109.             LPSTR   szCounterName;
  110.         };
  111.     };
  112.     LPSTR   szExplainText;
  113.     DWORD   DataBuffer[1];
  114. } PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;
  115.  
  116. typedef struct _PDH_COUNTER_INFO_W {
  117.     DWORD   dwLength;
  118.     DWORD   dwType;
  119.     DWORD   CVersion;
  120.     DWORD   CStatus;
  121.     LONG    lScale;
  122.     LONG    lDefaultScale;
  123.     DWORD   dwUserData;
  124.     DWORD   dwQueryUserData;
  125.     LPWSTR  szFullPath;
  126.     union   {
  127.         PDH_COUNTER_PATH_ELEMENTS_W CounterPath;
  128.         struct {
  129.             LPWSTR   szMachineName;
  130.             LPWSTR   szObjectName;
  131.             LPWSTR   szInstanceName;
  132.             LPWSTR   szParentInstance;
  133.             DWORD    dwInstanceIndex;
  134.             LPWSTR   szCounterName;
  135.         };
  136.     };
  137.     LPWSTR  szExplainText;
  138.     DWORD   DataBuffer[1];
  139. } PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;
  140.  
  141. // function definitions
  142.  
  143. PDH_FUNCTION 
  144. PdhGetDllVersion(
  145.     IN  LPDWORD lpdwVersion
  146. );
  147.  
  148. //
  149. //  Query Functions
  150. //
  151.  
  152. PDH_FUNCTION
  153. PdhOpenQuery (
  154.     IN      LPVOID      pReserved,
  155.     IN      DWORD       dwUserData,
  156.     IN      HQUERY      *phQuery
  157. );
  158.  
  159. PDH_FUNCTION
  160. PdhAddCounterW (
  161.     IN      HQUERY      hQuery,
  162.     IN      LPCWSTR     szFullCounterPath,
  163.     IN      DWORD       dwUserData,
  164.     IN      HCOUNTER    *phCounter
  165. );
  166.  
  167. PDH_FUNCTION
  168. PdhAddCounterA (
  169.     IN      HQUERY      hQuery,
  170.     IN      LPCSTR      szFullCounterPath,
  171.     IN      DWORD       dwUserData,
  172.     IN      HCOUNTER    *phCounter
  173. );
  174.  
  175. PDH_FUNCTION
  176. PdhRemoveCounter (
  177.     IN      HCOUNTER    hCounter
  178. );
  179.  
  180. PDH_FUNCTION
  181. PdhCollectQueryData (
  182.     IN      HQUERY      hQuery
  183. );
  184.  
  185. PDH_FUNCTION
  186. PdhCloseQuery (
  187.     IN      HQUERY      hQuery
  188. );
  189.     
  190. //
  191. //  Counter Functions
  192. //
  193.  
  194. PDH_FUNCTION
  195. PdhGetFormattedCounterValue (
  196.     IN      HCOUNTER                hCounter,
  197.     IN      DWORD                   dwFormat,
  198.     IN      LPDWORD                 lpdwType,
  199.     IN      PPDH_FMT_COUNTERVALUE   pValue
  200. );
  201.  
  202. // dwFormat flag values
  203. // 
  204. #define PDH_FMT_RAW     ((DWORD)0x00000010)
  205. #define PDH_FMT_ANSI    ((DWORD)0x00000020)
  206. #define PDH_FMT_UNICODE ((DWORD)0x00000040)
  207. #define PDH_FMT_LONG    ((DWORD)0x00000100)
  208. #define PDH_FMT_DOUBLE  ((DWORD)0x00000200)
  209. #define PDH_FMT_LARGE   ((DWORD)0x00000400)
  210. #define PDH_FMT_NOSCALE ((DWORD)0x00001000)
  211. #define PDH_FMT_1000    ((DWORD)0x00002000)
  212. #define PDH_FMT_NODATA  ((DWORD)0x00004000)
  213.  
  214. PDH_FUNCTION
  215. PdhGetRawCounterValue (
  216.     IN      HCOUNTER            hCounter,
  217.     IN      LPDWORD             lpdwType,
  218.     IN      PPDH_RAW_COUNTER    pValue
  219. );
  220.  
  221. PDH_FUNCTION
  222. PdhCalculateCounterFromRawValue (
  223.     IN      HCOUNTER                hCounter,
  224.     IN      DWORD                   dwFormat,
  225.     IN      PPDH_RAW_COUNTER        rawValue1,
  226.     IN      PPDH_RAW_COUNTER        rawValue2,
  227.     IN      PPDH_FMT_COUNTERVALUE   fmtValue
  228. );
  229.  
  230. PDH_FUNCTION
  231. PdhComputeCounterStatistics (
  232.     IN      HCOUNTER            hCounter,
  233.     IN      DWORD               dwFormat,
  234.     IN      DWORD               dwFirstEntry,
  235.     IN      DWORD               dwNumEntries,
  236.     IN      PPDH_RAW_COUNTER    lpRawValueArray,
  237.     IN      PPDH_STATISTICS     data
  238. );
  239.  
  240. PDH_FUNCTION
  241. PdhGetCounterInfoW (
  242.     IN      HCOUNTER            hCounter,
  243.     IN      BOOLEAN             bRetrieveExplainText,
  244.     IN      LPDWORD             pdwBufferSize,
  245.     IN      PPDH_COUNTER_INFO_W lpBuffer
  246. );
  247.  
  248. PDH_FUNCTION
  249. PdhGetCounterInfoA (
  250.     IN      HCOUNTER            hCounter,
  251.     IN      BOOLEAN             bRetrieveExplainText,
  252.     IN      LPDWORD             pdwBufferSize,
  253.     IN      PPDH_COUNTER_INFO_A lpBuffer
  254. );
  255.  
  256. #define PDH_MAX_SCALE    (7L)
  257. #define PDH_MIN_SCALE   (-7L)
  258.  
  259. PDH_FUNCTION
  260. PdhSetCounterScaleFactor (
  261.     IN      HCOUNTER    hCounter,
  262.     IN      LONG        lFactor
  263. );
  264. //
  265. //   Browsing and enumeration functions
  266. //
  267. PDH_FUNCTION
  268. PdhConnectMachineW (
  269.     IN      LPCWSTR  szMachineName
  270. );
  271.  
  272. PDH_FUNCTION
  273. PdhConnectMachineA (
  274.     IN      LPCSTR  szMachineName
  275. );
  276.  
  277. PDH_FUNCTION
  278. PdhEnumMachinesW (
  279.     IN      LPCWSTR szReserved,
  280.     IN      LPWSTR  mszMachineList,
  281.     IN      LPDWORD pcchBufferSize
  282. );
  283.  
  284. PDH_FUNCTION
  285. PdhEnumMachinesA (
  286.     IN      LPCSTR   szReserved,
  287.     IN      LPSTR    mszMachineList,
  288.     IN      LPDWORD  pcchBufferSize
  289. );
  290.  
  291. PDH_FUNCTION
  292. PdhEnumObjectsW (
  293.     IN      LPCWSTR szReserved,
  294.     IN      LPCWSTR szMachineName,
  295.     IN      LPWSTR  mszObjectList,
  296.     IN      LPDWORD pcchBufferSize,
  297.     IN      DWORD   dwDetailLevel,
  298.     IN      BOOL    bRefresh
  299. );
  300.  
  301. PDH_FUNCTION
  302. PdhEnumObjectsA (
  303.     IN      LPCSTR  szReserved,
  304.     IN      LPCSTR  szMachineName,
  305.     IN      LPSTR   mszObjectList,
  306.     IN      LPDWORD pcchBufferSize,
  307.     IN      DWORD   dwDetailLevel,
  308.     IN      BOOL    bRefresh
  309. );
  310.  
  311. PDH_FUNCTION
  312. PdhEnumObjectItemsW (
  313.     IN      LPCWSTR szReserved,
  314.     IN      LPCWSTR szMachineName,
  315.     IN      LPCWSTR szObjectName,
  316.     IN      LPWSTR  mszCounterList,
  317.     IN      LPDWORD pcchCounterListLength,
  318.     IN      LPWSTR  mszInstanceList,
  319.     IN      LPDWORD pcchInstanceListLength,
  320.     IN      DWORD   dwDetailLevel,
  321.     IN      DWORD   dwFlags
  322. );
  323.  
  324. PDH_FUNCTION
  325. PdhEnumObjectItemsA (
  326.     IN      LPCSTR  szReserved,
  327.     IN      LPCSTR  szMachineName,
  328.     IN      LPCSTR  szObjectName,
  329.     IN      LPSTR   mszCounterList,
  330.     IN      LPDWORD pcchCounterListLength,
  331.     IN      LPSTR   mszInstanceList,
  332.     IN      LPDWORD pcchInstanceListLength,
  333.     IN      DWORD   dwDetailLevel,
  334.     IN      DWORD   dwFlags
  335. );
  336.  
  337. PDH_FUNCTION
  338. PdhMakeCounterPathW (
  339.     IN      PDH_COUNTER_PATH_ELEMENTS_W *pCounterPathElements,
  340.     IN      LPWSTR                      szFullPathBuffer,
  341.     IN      LPDWORD                     pcchBufferSize,
  342.     IN      DWORD                       dwFlags
  343. );
  344.  
  345. PDH_FUNCTION
  346. PdhMakeCounterPathA (
  347.     IN      PDH_COUNTER_PATH_ELEMENTS_A *pCounterPathElements,
  348.     IN      LPSTR                       szFullPathBuffer,
  349.     IN      LPDWORD                     pcchBufferSize,
  350.     IN      DWORD                       dwFlags
  351. );
  352.  
  353. PDH_FUNCTION
  354. PdhParseCounterPathW (
  355.     IN      LPCWSTR                     szFullPathBuffer,
  356.     IN      PDH_COUNTER_PATH_ELEMENTS_W *pCounterPathElements,
  357.     IN      LPDWORD                     pdwBufferSize,
  358.     IN      DWORD                       dwFlags
  359. );
  360.  
  361. PDH_FUNCTION
  362. PdhParseCounterPathA (
  363.     IN      LPCSTR                      szFullPathBuffer,
  364.     IN      PDH_COUNTER_PATH_ELEMENTS_A *pCounterPathElements,
  365.     IN      LPDWORD                     pdwBufferSize,
  366.     IN      DWORD                       dwFlags
  367. );
  368.  
  369. PDH_FUNCTION
  370. PdhParseInstanceNameW (
  371.     IN      LPCWSTR szInstanceString,
  372.     IN      LPWSTR  szInstanceName,
  373.     IN      LPDWORD pcchInstanceNameLength,
  374.     IN      LPWSTR  szParentName,
  375.     IN      LPDWORD pcchParentNameLength,
  376.     IN      LPDWORD lpIndex
  377. );
  378.  
  379. PDH_FUNCTION
  380. PdhParseInstanceNameA (
  381.     IN      LPCSTR  szInstanceString,
  382.     IN      LPSTR   szInstanceName,
  383.     IN      LPDWORD pcchInstanceNameLength,
  384.     IN      LPSTR   szParentName,
  385.     IN      LPDWORD pcchParentNameLength,
  386.     IN      LPDWORD lpIndex
  387. );
  388.  
  389. PDH_FUNCTION
  390. PdhValidatePathW (
  391.     IN      LPCWSTR szFullPathBuffer
  392. );
  393.  
  394. PDH_FUNCTION
  395. PdhValidatePathA (
  396.     IN      LPCSTR  szFullPathBuffer
  397. );
  398.  
  399. PDH_FUNCTION
  400. PdhGetDefaultPerfObjectW (
  401.     IN      LPCWSTR szReserved,
  402.     IN      LPCWSTR szMachineName,
  403.     IN      LPWSTR  szDefaultObjectName,
  404.     IN      LPDWORD pcchBufferSize
  405. );
  406.  
  407. PDH_FUNCTION
  408. PdhGetDefaultPerfObjectA (
  409.     IN      LPCSTR  szReserved,
  410.     IN      LPCSTR  szMachineName,
  411.     IN      LPSTR   szDefaultObjectName,
  412.     IN      LPDWORD pcchBufferSize
  413. );
  414.  
  415. PDH_FUNCTION
  416. PdhGetDefaultPerfCounterW (
  417.     IN      LPCWSTR szReserved,
  418.     IN      LPCWSTR szMachineName,
  419.     IN      LPCWSTR szObjectName,
  420.     IN      LPWSTR  szDefaultCounterName,
  421.     IN      LPDWORD pcchBufferSize
  422. );
  423.  
  424. PDH_FUNCTION
  425. PdhGetDefaultPerfCounterA (
  426.     IN      LPCSTR  szReserved,
  427.     IN      LPCSTR  szMachineName,
  428.     IN      LPCSTR  szObjectName,
  429.     IN      LPSTR   szDefaultCounterName,
  430.     IN      LPDWORD pcchBufferSize
  431. );
  432.  
  433. typedef PDH_STATUS (__stdcall *CounterPathCallBack)(DWORD);
  434.  
  435. typedef struct _BrowseDlgConfig_W {
  436.     // Configuration flags
  437.     DWORD   bIncludeInstanceIndex:1,
  438.             bSingleCounterPerAdd:1,
  439.             bSingleCounterPerDialog:1,
  440.             bLocalCountersOnly:1,
  441.             bWildCardInstances:1,
  442.             bHideDetailBox:1,
  443.             bInitializePath:1,
  444.             bDisableMachineSelection:1,
  445.             bReserved:24;
  446.  
  447.     HWND                hWndOwner;
  448.     LPWSTR              szReserved;
  449.     LPWSTR              szReturnPathBuffer;
  450.     DWORD               cchReturnPathLength;
  451.     CounterPathCallBack pCallBack;
  452.     DWORD               dwCallBackArg;
  453.     PDH_STATUS          CallBackStatus;
  454.     DWORD               dwDefaultDetailLevel;
  455.     LPWSTR              szDialogBoxCaption;
  456. } PDH_BROWSE_DLG_CONFIG_W, *PPDH_BROWSE_DLG_CONFIG_W;
  457.  
  458. typedef struct _BrowseDlgConfig_A {
  459.     // Configuration flags
  460.     DWORD   bIncludeInstanceIndex:1,
  461.             bSingleCounterPerAdd:1,
  462.             bSingleCounterPerDialog:1,
  463.             bLocalCountersOnly:1,
  464.             bWildCardInstances:1,
  465.             bHideDetailBox:1,
  466.             bInitializePath:1,
  467.             bDisableMachineSelection:1,
  468.             bReserved:24;
  469.  
  470.     HWND                hWndOwner;
  471.     LPSTR               szReserved;
  472.     LPSTR               szReturnPathBuffer;
  473.     DWORD               cchReturnPathLength;
  474.     CounterPathCallBack pCallBack;
  475.     DWORD               dwCallBackArg;
  476.     PDH_STATUS          CallBackStatus;
  477.     DWORD               dwDefaultDetailLevel;
  478.     LPSTR               szDialogBoxCaption;
  479. } PDH_BROWSE_DLG_CONFIG_A, *PPDH_BROWSE_DLG_CONFIG_A;
  480.  
  481. PDH_FUNCTION
  482. PdhBrowseCountersW (
  483.     IN      PPDH_BROWSE_DLG_CONFIG_W    pBrowseDlgData
  484. );
  485.  
  486. PDH_FUNCTION
  487. PdhBrowseCountersA (
  488.     IN      PPDH_BROWSE_DLG_CONFIG_A    pBrowseDlgData
  489. );
  490.  
  491. PDH_FUNCTION
  492. PdhExpandCounterPathW (
  493.     IN      LPCWSTR     szWildCardPath,
  494.     IN      LPWSTR      mszExpandedPathList,
  495.     IN      LPDWORD     pcchPathListLength
  496. );
  497.  
  498. PDH_FUNCTION
  499. PdhExpandCounterPathA (
  500.     IN      LPCSTR      szWildCardPath,
  501.     IN      LPSTR       mszExpandedPathList,
  502.     IN      LPDWORD     pcchPathListLength
  503. );
  504.  
  505. //
  506. //   Unicode/ANSI compatibility section
  507. //
  508. #ifdef UNICODE
  509. #ifndef _UNICODE
  510. #define _UNICODE
  511. #endif
  512. #endif
  513.  
  514. #ifdef _UNICODE
  515. #ifndef UNICODE
  516. #define UNICODE
  517. #endif
  518. #endif
  519.  
  520. #ifdef UNICODE
  521. // start of UNICODE definitions
  522. #define PdhAddCounter                PdhAddCounterW
  523. #define PdhGetCounterInfo           PdhGetCounterInfoW
  524. #define PDH_COUNTER_INFO            PDH_COUNTER_INFO_W
  525. #define PPDH_COUNTER_INFO            PPDH_COUNTER_INFO_W
  526. #define PdhConnectMachine           PdhConnectMachineW
  527. #define PdhEnumMachines             PdhEnumMachinesW
  528. #define PdhEnumObjects              PdhEnumObjectsW
  529. #define PdhEnumObjectItems          PdhEnumObjectItemsW
  530. #define PdhMakeCounterPath          PdhMakeCounterPathW
  531. #define PDH_COUNTER_PATH_ELEMENTS   PDH_COUNTER_PATH_ELEMENTS_W
  532. #define PPDH_COUNTER_PATH_ELEMENTS  PPDH_COUNTER_PATH_ELEMENTS_W
  533. #define PdhParseCounterPath         PdhParseCounterPathW
  534. #define PdhParseInstanceName        PdhParseInstanceNameW
  535. #define PdhValidatePath             PdhValidatePathW
  536. #define PdhGetDefaultPerfObject     PdhGetDefaultPerfObjectW
  537. #define PdhGetDefaultPerfCounter    PdhGetDefaultPerfCounterW
  538. #define PdhBrowseCounters           PdhBrowseCountersW
  539. #define PDH_BROWSE_DLG_CONFIG       PDH_BROWSE_DLG_CONFIG_W
  540. #define PPDH_BROWSE_DLG_CONFIG      PPDH_BROWSE_DLG_CONFIG_W
  541. #define PdhExpandCounterPath        PdhExpandCounterPathW
  542. // end of UNICODE definitions
  543. #else 
  544. // start of ANSI definitions
  545. #define PdhAddCounter                PdhAddCounterA
  546. #define PdhGetCounterInfo           PdhGetCounterInfoA
  547. #define PDH_COUNTER_INFO            PDH_COUNTER_INFO_A
  548. #define PPDH_COUNTER_INFO            PPDH_COUNTER_INFO_A
  549. #define PdhConnectMachine           PdhConnectMachineA
  550. #define PdhEnumMachines             PdhEnumMachinesA
  551. #define PdhEnumObjects              PdhEnumObjectsA
  552. #define PdhEnumObjectItems          PdhEnumObjectItemsA
  553. #define PdhMakeCounterPath          PdhMakeCounterPathA
  554. #define PDH_COUNTER_PATH_ELEMENTS   PDH_COUNTER_PATH_ELEMENTS_A
  555. #define PPDH_COUNTER_PATH_ELEMENTS  PPDH_COUNTER_PATH_ELEMENTS_A
  556. #define PdhParseCounterPath         PdhParseCounterPathA
  557. #define PdhParseInstanceName        PdhParseInstanceNameA
  558. #define PdhValidatePath             PdhValidatePathA
  559. #define PdhGetDefaultPerfObject     PdhGetDefaultPerfObjectA
  560. #define PdhGetDefaultPerfCounter    PdhGetDefaultPerfCounterA
  561. #define PdhBrowseCounters           PdhBrowseCountersA
  562. #define PDH_BROWSE_DLG_CONFIG       PDH_BROWSE_DLG_CONFIG_A
  563. #define PPDH_BROWSE_DLG_CONFIG      PPDH_BROWSE_DLG_CONFIG_A
  564. #define PdhExpandCounterPath        PdhExpandCounterPathA
  565. // end of ANSI definitions
  566. #endif  // UNICODE
  567.  
  568. #ifdef __cplusplus
  569. }
  570. #endif
  571.  
  572. #endif //_PDH_H_
  573.