home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / pdh.h < prev    next >
Text File  |  1998-04-25  |  32KB  |  1,083 lines

  1. /*++
  2.  
  3. Copyright (C) 1996-1997 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  ((DWORD)(0x0400))
  31. // v1.1 revision of PDH -- basic log functions
  32. // v1.2 of the PDH -- adds variable instance counters
  33. // v1.3 of the PDH -- adds log service control & stubs for NT5/PDH v2 fn's
  34. #define PDH_VERSION         ((DWORD)((PDH_CVERSION_WIN40) + 0x0003))
  35.  
  36. // define severity masks
  37. #define IsSuccessSeverity(ErrorCode)    \
  38.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x00000000L) ? TRUE : FALSE)
  39. #define IsInformationalSeverity(ErrorCode)    \
  40.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x40000000L) ? TRUE : FALSE)
  41. #define IsWarningSeverity(ErrorCode)    \
  42.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0x80000000L) ? TRUE : FALSE)
  43. #define IsErrorSeverity(ErrorCode)      \
  44.     ((((DWORD)(ErrorCode) & (0xC0000000L)) == 0xC0000000L) ? TRUE : FALSE)
  45.  
  46. // data type definitions
  47.  
  48. typedef HANDLE  HCOUNTER;
  49. typedef HANDLE  HQUERY;
  50. typedef HANDLE  HLOG;
  51.  
  52. typedef struct _PDH_RAW_COUNTER {
  53.     DWORD       CStatus;
  54.     FILETIME    TimeStamp;
  55.     LONGLONG    FirstValue;
  56.     LONGLONG    SecondValue;
  57.     DWORD       MultiCount;
  58. } PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;
  59.  
  60. typedef struct _PDH_RAW_COUNTER_ITEM_A {
  61.     LPSTR           szName;
  62.     PDH_RAW_COUNTER RawValue;
  63. } PDH_RAW_COUNTER_ITEM_A, *PPDH_RAW_COUNTER_ITEM_A;
  64.  
  65. typedef struct _PDH_RAW_COUNTER_ITEM_W {
  66.     LPWSTR          szName;
  67.     PDH_RAW_COUNTER RawValue;
  68. } PDH_RAW_COUNTER_ITEM_W, *PPDH_RAW_COUNTER_ITEM_W;
  69.  
  70. typedef struct _PDH_FMT_COUNTERVALUE {
  71.     DWORD    CStatus;
  72.     union {
  73.         LONG        longValue;
  74.         double      doubleValue;
  75.         LONGLONG    largeValue;
  76.         LPSTR       AnsiStringValue;
  77.         LPWSTR      WideStringValue;
  78.     };
  79. } PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
  80.  
  81. typedef struct _PDH_FMT_COUNTERVALUE_ITEM_A {
  82.     LPSTR                   szName;
  83.     PDH_FMT_COUNTERVALUE    FmtValue;
  84. } PDH_FMT_COUNTERVALUE_ITEM_A, *PPDH_FMT_COUNTERVALUE_ITEM_A;
  85.  
  86. typedef struct _PDH_FMT_COUNTERVALUE_ITEM_W {
  87.     LPWSTR                  szName;
  88.     PDH_FMT_COUNTERVALUE    FmtValue;
  89. } PDH_FMT_COUNTERVALUE_ITEM_W, *PPDH_FMT_COUNTERVALUE_ITEM_W;
  90.  
  91. typedef struct _PDH_STATISTICS {
  92.     DWORD                   dwFormat;
  93.     DWORD                   count;
  94.     PDH_FMT_COUNTERVALUE    min;
  95.     PDH_FMT_COUNTERVALUE    max;
  96.     PDH_FMT_COUNTERVALUE    mean;
  97. } PDH_STATISTICS, *PPDH_STATISTICS;
  98.  
  99. typedef struct _PDH_COUNTER_PATH_ELEMENTS_A {
  100.     LPSTR   szMachineName;
  101.     LPSTR   szObjectName;
  102.     LPSTR   szInstanceName;
  103.     LPSTR   szParentInstance;
  104.     DWORD   dwInstanceIndex;
  105.     LPSTR   szCounterName;
  106. } PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;
  107.  
  108. typedef struct _PDH_COUNTER_PATH_ELEMENTS_W {
  109.     LPWSTR  szMachineName;
  110.     LPWSTR  szObjectName;
  111.     LPWSTR  szInstanceName;
  112.     LPWSTR  szParentInstance;
  113.     DWORD   dwInstanceIndex;
  114.     LPWSTR  szCounterName;
  115. } PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;
  116.  
  117. typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A {
  118.     LPSTR   szMachineName;
  119.     GUID    ObjectGUID;
  120.     DWORD   dwItemId;
  121.     LPSTR   szInstanceName;
  122. } PDH_DATA_ITEM_PATH_ELEMENTS_A, * PPDH_DATA_ITEM_PATH_ELEMENTS_A;
  123.  
  124. typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W {
  125.     LPWSTR  szMachineName;
  126.     GUID    ObjectGUID;
  127.     DWORD   dwItemId;
  128.     LPWSTR  szInstanceName;
  129. } PDH_DATA_ITEM_PATH_ELEMENTS_W, * PPDH_DATA_ITEM_PATH_ELEMENTS_W;
  130.  
  131. typedef struct _PDH_COUNTER_INFO_A {
  132.     DWORD   dwLength;
  133.     DWORD   dwType;
  134.     DWORD   CVersion;
  135.     DWORD   CStatus;
  136.     LONG    lScale;
  137.     LONG    lDefaultScale;
  138.     DWORD   dwUserData;
  139.     DWORD   dwQueryUserData;
  140.     LPSTR   szFullPath;
  141.     union   {
  142.         PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
  143.         PDH_COUNTER_PATH_ELEMENTS_A CounterPath;
  144.         struct {
  145.             LPSTR   szMachineName;
  146.             LPSTR   szObjectName;
  147.             LPSTR   szInstanceName;
  148.             LPSTR   szParentInstance;
  149.             DWORD   dwInstanceIndex;
  150.             LPSTR   szCounterName;
  151.         };
  152.     };
  153.     LPSTR   szExplainText;
  154.     DWORD   DataBuffer[1];
  155. } PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;
  156.  
  157. typedef struct _PDH_COUNTER_INFO_W {
  158.     DWORD   dwLength;
  159.     DWORD   dwType;
  160.     DWORD   CVersion;
  161.     DWORD   CStatus;
  162.     LONG    lScale;
  163.     LONG    lDefaultScale;
  164.     DWORD   dwUserData;
  165.     DWORD   dwQueryUserData;
  166.     LPWSTR  szFullPath;
  167.     union   {
  168.         PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
  169.         PDH_COUNTER_PATH_ELEMENTS_W CounterPath;
  170.         struct {
  171.             LPWSTR   szMachineName;
  172.             LPWSTR   szObjectName;
  173.             LPWSTR   szInstanceName;
  174.             LPWSTR   szParentInstance;
  175.             DWORD    dwInstanceIndex;
  176.             LPWSTR   szCounterName;
  177.         };
  178.     };
  179.     LPWSTR  szExplainText;
  180.     DWORD   DataBuffer[1];
  181. } PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;
  182.  
  183. typedef struct _PDH_TIME_INFO {
  184.     LONGLONG    StartTime;
  185.     LONGLONG    EndTime;
  186.     DWORD       SampleCount;
  187. } PDH_TIME_INFO, *PPDH_TIME_INFO;
  188.  
  189. typedef struct _PDH_RAW_LOG_RECORD {
  190.     DWORD       dwStructureSize;
  191.     DWORD       dwRecordType;
  192.     DWORD       dwItems;
  193.     UCHAR       RawBytes[1];
  194. } PDH_RAW_LOG_RECORD, *PPDH_RAW_LOG_RECORD;
  195.  
  196. typedef struct _PDH_LOG_SERVICE_QUERY_INFO_A {
  197.     DWORD   dwSize;
  198.     DWORD   dwFlags;
  199.     DWORD   dwLogQuota;
  200.     LPSTR   szLogFileCaption;
  201.     LPSTR   szDefaultDir;
  202.     LPSTR   szBaseFileName;
  203.     DWORD   dwFileType;
  204.     DWORD   dwReserved;
  205.     union {
  206.         struct {
  207.             DWORD   PdlAutoNameInterval;
  208.             DWORD   PdlAutoNameUnits;
  209.             LPSTR   PdlCommandFilename;
  210.             LPSTR   PdlCounterList;
  211.             DWORD   PdlAutoNameFormat;
  212.             DWORD   PdlSampleInterval;
  213.             FILETIME    PdlLogStartTime;
  214.             FILETIME    PdlLogEndTime;
  215.         };
  216.         struct {
  217.             DWORD   TlNumberOfBuffers;
  218.             DWORD   TlMinimumBuffers;
  219.             DWORD   TlMaximumBuffers;
  220.             DWORD   TlFreeBuffers;
  221.             DWORD   TlBufferSize;
  222.             DWORD   TlEventsLost;
  223.             DWORD   TlLoggerThreadId;
  224.             DWORD   TlBuffersWritten;
  225.             DWORD   TlLogHandle;
  226.             LPSTR   TlLogFileName;
  227.         };
  228.     };
  229. } PDH_LOG_SERVICE_QUERY_INFO_A, *PPDH_LOG_SERVICE_QUERY_INFO_A;
  230.  
  231. typedef struct _PDH_LOG_SERVICE_QUERY_INFO_W {
  232.     DWORD   dwSize;
  233.     DWORD   dwFlags;
  234.     DWORD   dwLogQuota;
  235.     LPWSTR  szLogFileCaption;
  236.     LPWSTR  szDefaultDir;
  237.     LPWSTR  szBaseFileName;
  238.     DWORD   dwFileType;
  239.     DWORD   dwReserved;
  240.     union {
  241.         struct {
  242.             DWORD   PdlAutoNameInterval;
  243.             DWORD   PdlAutoNameUnits;
  244.             LPWSTR  PdlCommandFilename;
  245.             LPWSTR  PdlCounterList;
  246.             DWORD   PdlAutoNameFormat;
  247.             DWORD   PdlSampleInterval;
  248.             FILETIME    PdlLogStartTime;
  249.             FILETIME    PdlLogEndTime;
  250.         };
  251.         struct {
  252.             DWORD   TlNumberOfBuffers;
  253.             DWORD   TlMinimumBuffers;
  254.             DWORD   TlMaximumBuffers;
  255.             DWORD   TlFreeBuffers;
  256.             DWORD   TlBufferSize;
  257.             DWORD   TlEventsLost;
  258.             DWORD   TlLoggerThreadId;
  259.             DWORD   TlBuffersWritten;
  260.             DWORD   TlLogHandle;
  261.             LPWSTR  TlLogFileName;
  262.         };
  263.     };
  264. } PDH_LOG_SERVICE_QUERY_INFO_W, *PPDH_LOG_SERVICE_QUERY_INFO_W;
  265.  
  266. //
  267. //  Time value constants
  268. //
  269. #define MAX_TIME_VALUE      ((LONGLONG)0x7FFFFFFFFFFFFFFF)
  270. #define MIN_TIME_VALUE      ((LONGLONG)0)
  271.  
  272. // function definitions
  273.  
  274. PDH_FUNCTION
  275. PdhGetDllVersion(
  276.     IN  LPDWORD lpdwVersion
  277. );
  278.  
  279. //
  280. //  Query Functions
  281. //
  282.  
  283. PDH_FUNCTION
  284. PdhOpenQueryW (
  285.     IN      LPCWSTR     szDataSource,
  286.     IN      DWORD       dwUserData,
  287.     IN      HQUERY      *phQuery
  288. );
  289.  
  290. PDH_FUNCTION
  291. PdhOpenQueryA (
  292.     IN      LPCSTR      szDataSource,
  293.     IN      DWORD       dwUserData,
  294.     IN      HQUERY      *phQuery
  295. );
  296.  
  297. PDH_FUNCTION
  298. PdhAddCounterW (
  299.     IN      HQUERY      hQuery,
  300.     IN      LPCWSTR     szFullCounterPath,
  301.     IN      DWORD       dwUserData,
  302.     IN      HCOUNTER    *phCounter
  303. );
  304.  
  305. PDH_FUNCTION
  306. PdhAddCounterA (
  307.     IN      HQUERY      hQuery,
  308.     IN      LPCSTR      szFullCounterPath,
  309.     IN      DWORD       dwUserData,
  310.     IN      HCOUNTER    *phCounter
  311. );
  312.  
  313. PDH_FUNCTION
  314. PdhRemoveCounter (
  315.     IN      HCOUNTER    hCounter
  316. );
  317.  
  318. PDH_FUNCTION
  319. PdhCollectQueryData (
  320.     IN      HQUERY      hQuery
  321. );
  322.  
  323. PDH_FUNCTION
  324. PdhCloseQuery (
  325.     IN      HQUERY      hQuery
  326. );
  327.  
  328. //
  329. //  Counter Functions
  330. //
  331.  
  332. PDH_FUNCTION
  333. PdhGetFormattedCounterValue (
  334.     IN      HCOUNTER                hCounter,
  335.     IN      DWORD                   dwFormat,
  336.     IN      LPDWORD                 lpdwType,
  337.     IN      PPDH_FMT_COUNTERVALUE   pValue
  338. );
  339.  
  340. PDH_FUNCTION
  341. PdhGetFormattedCounterArrayA (
  342.     IN      HCOUNTER                hCounter,
  343.     IN      DWORD                   dwFormat,
  344.     IN      LPDWORD                 lpdwBufferSize,
  345.     IN      LPDWORD                 lpdwItemCount,
  346.     IN      PPDH_FMT_COUNTERVALUE_ITEM_A    ItemBuffer
  347. );
  348.         
  349. PDH_FUNCTION
  350. PdhGetFormattedCounterArrayW (
  351.     IN      HCOUNTER                hCounter,
  352.     IN      DWORD                   dwFormat,
  353.     IN      LPDWORD                 lpdwBufferSize,
  354.     IN      LPDWORD                 lpdwItemCount,
  355.     IN      PPDH_FMT_COUNTERVALUE_ITEM_W    ItemBuffer
  356. );
  357.        
  358.  
  359. // dwFormat flag values
  360. //
  361. #define PDH_FMT_RAW     ((DWORD)0x00000010)
  362. #define PDH_FMT_ANSI    ((DWORD)0x00000020)
  363. #define PDH_FMT_UNICODE ((DWORD)0x00000040)
  364. #define PDH_FMT_LONG    ((DWORD)0x00000100)
  365. #define PDH_FMT_DOUBLE  ((DWORD)0x00000200)
  366. #define PDH_FMT_LARGE   ((DWORD)0x00000400)
  367. #define PDH_FMT_NOSCALE ((DWORD)0x00001000)
  368. #define PDH_FMT_1000    ((DWORD)0x00002000)
  369. #define PDH_FMT_NODATA  ((DWORD)0x00004000)
  370.  
  371. #define PERF_DETAIL_COSTLY   ((DWORD)0x00010000)
  372. #define PERF_DETAIL_STANDARD ((DWORD)0x0000FFFF)
  373.  
  374. PDH_FUNCTION
  375. PdhGetRawCounterValue (
  376.     IN      HCOUNTER            hCounter,
  377.     IN      LPDWORD             lpdwType,
  378.     IN      PPDH_RAW_COUNTER    pValue
  379. );
  380.  
  381. PDH_FUNCTION
  382. PdhGetRawCounterArrayA (
  383.     IN      HCOUNTER                hCounter,
  384.     IN      LPDWORD                 lpdwBufferSize,
  385.     IN      LPDWORD                 lpdwItemCount,
  386.     IN      PPDH_RAW_COUNTER_ITEM_A ItemBuffer
  387. );
  388.        
  389. PDH_FUNCTION
  390. PdhGetRawCounterArrayW (
  391.     IN      HCOUNTER                hCounter,
  392.     IN      LPDWORD                 lpdwBufferSize,
  393.     IN      LPDWORD                 lpdwItemCount,
  394.     IN      PPDH_RAW_COUNTER_ITEM_W ItemBuffer
  395. );
  396.        
  397. PDH_FUNCTION
  398. PdhCalculateCounterFromRawValue (
  399.     IN      HCOUNTER                hCounter,
  400.     IN      DWORD                   dwFormat,
  401.     IN      PPDH_RAW_COUNTER        rawValue1,
  402.     IN      PPDH_RAW_COUNTER        rawValue2,
  403.     IN      PPDH_FMT_COUNTERVALUE   fmtValue
  404. );
  405.  
  406. PDH_FUNCTION
  407. PdhComputeCounterStatistics (
  408.     IN      HCOUNTER            hCounter,
  409.     IN      DWORD               dwFormat,
  410.     IN      DWORD               dwFirstEntry,
  411.     IN      DWORD               dwNumEntries,
  412.     IN      PPDH_RAW_COUNTER    lpRawValueArray,
  413.     IN      PPDH_STATISTICS     data
  414. );
  415.  
  416. PDH_FUNCTION
  417. PdhGetCounterInfoW (
  418.     IN      HCOUNTER            hCounter,
  419.     IN      BOOLEAN             bRetrieveExplainText,
  420.     IN      LPDWORD             pdwBufferSize,
  421.     IN      PPDH_COUNTER_INFO_W lpBuffer
  422. );
  423.  
  424. PDH_FUNCTION
  425. PdhGetCounterInfoA (
  426.     IN      HCOUNTER            hCounter,
  427.     IN      BOOLEAN             bRetrieveExplainText,
  428.     IN      LPDWORD             pdwBufferSize,
  429.     IN      PPDH_COUNTER_INFO_A lpBuffer
  430. );
  431.  
  432. #define PDH_MAX_SCALE    (7L)
  433. #define PDH_MIN_SCALE   (-7L)
  434.  
  435. PDH_FUNCTION
  436. PdhSetCounterScaleFactor (
  437.     IN      HCOUNTER    hCounter,
  438.     IN      LONG        lFactor
  439. );
  440. //
  441. //   Browsing and enumeration functions
  442. //
  443. PDH_FUNCTION
  444. PdhConnectMachineW (
  445.     IN      LPCWSTR  szMachineName
  446. );
  447.  
  448. PDH_FUNCTION
  449. PdhConnectMachineA (
  450.     IN      LPCSTR  szMachineName
  451. );
  452.  
  453. PDH_FUNCTION
  454. PdhEnumMachinesW (
  455.     IN      LPCWSTR szDataSource,
  456.     IN      LPWSTR  mszMachineList,
  457.     IN      LPDWORD pcchBufferSize
  458. );
  459.  
  460. PDH_FUNCTION
  461. PdhEnumMachinesA (
  462.     IN      LPCSTR   szDataSource,
  463.     IN      LPSTR    mszMachineList,
  464.     IN      LPDWORD  pcchBufferSize
  465. );
  466.  
  467. PDH_FUNCTION
  468. PdhEnumObjectsW (
  469.     IN      LPCWSTR szDataSource,
  470.     IN      LPCWSTR szMachineName,
  471.     IN      LPWSTR  mszObjectList,
  472.     IN      LPDWORD pcchBufferSize,
  473.     IN      DWORD   dwDetailLevel,
  474.     IN      BOOL    bRefresh
  475. );
  476.  
  477. PDH_FUNCTION
  478. PdhEnumObjectsA (
  479.     IN      LPCSTR  szDataSource,
  480.     IN      LPCSTR  szMachineName,
  481.     IN      LPSTR   mszObjectList,
  482.     IN      LPDWORD pcchBufferSize,
  483.     IN      DWORD   dwDetailLevel,
  484.     IN      BOOL    bRefresh
  485. );
  486.  
  487. PDH_FUNCTION
  488. PdhEnumObjectItemsW (
  489.     IN      LPCWSTR szDataSource,
  490.     IN      LPCWSTR szMachineName,
  491.     IN      LPCWSTR szObjectName,
  492.     IN      LPWSTR  mszCounterList,
  493.     IN      LPDWORD pcchCounterListLength,
  494.     IN      LPWSTR  mszInstanceList,
  495.     IN      LPDWORD pcchInstanceListLength,
  496.     IN      DWORD   dwDetailLevel,
  497.     IN      DWORD   dwFlags
  498. );
  499.  
  500. PDH_FUNCTION
  501. PdhEnumObjectItemsA (
  502.     IN      LPCSTR  szDataSource,
  503.     IN      LPCSTR  szMachineName,
  504.     IN      LPCSTR  szObjectName,
  505.     IN      LPSTR   mszCounterList,
  506.     IN      LPDWORD pcchCounterListLength,
  507.     IN      LPSTR   mszInstanceList,
  508.     IN      LPDWORD pcchInstanceListLength,
  509.     IN      DWORD   dwDetailLevel,
  510.     IN      DWORD   dwFlags
  511. );
  512.  
  513. PDH_FUNCTION
  514. PdhMakeCounterPathW (
  515.     IN      PDH_COUNTER_PATH_ELEMENTS_W *pCounterPathElements,
  516.     IN      LPWSTR                      szFullPathBuffer,
  517.     IN      LPDWORD                     pcchBufferSize,
  518.     IN      DWORD                       dwFlags
  519. );
  520.  
  521. PDH_FUNCTION
  522. PdhMakeCounterPathA (
  523.     IN      PDH_COUNTER_PATH_ELEMENTS_A *pCounterPathElements,
  524.     IN      LPSTR                       szFullPathBuffer,
  525.     IN      LPDWORD                     pcchBufferSize,
  526.     IN      DWORD                       dwFlags
  527. );
  528.  
  529. PDH_FUNCTION
  530. PdhParseCounterPathW (
  531.     IN      LPCWSTR                     szFullPathBuffer,
  532.     IN      PDH_COUNTER_PATH_ELEMENTS_W *pCounterPathElements,
  533.     IN      LPDWORD                     pdwBufferSize,
  534.     IN      DWORD                       dwFlags
  535. );
  536.  
  537. PDH_FUNCTION
  538. PdhParseCounterPathA (
  539.     IN      LPCSTR                      szFullPathBuffer,
  540.     IN      PDH_COUNTER_PATH_ELEMENTS_A *pCounterPathElements,
  541.     IN      LPDWORD                     pdwBufferSize,
  542.     IN      DWORD                       dwFlags
  543. );
  544.  
  545. PDH_FUNCTION
  546. PdhParseInstanceNameW (
  547.     IN      LPCWSTR szInstanceString,
  548.     IN      LPWSTR  szInstanceName,
  549.     IN      LPDWORD pcchInstanceNameLength,
  550.     IN      LPWSTR  szParentName,
  551.     IN      LPDWORD pcchParentNameLength,
  552.     IN      LPDWORD lpIndex
  553. );
  554.  
  555. PDH_FUNCTION
  556. PdhParseInstanceNameA (
  557.     IN      LPCSTR  szInstanceString,
  558.     IN      LPSTR   szInstanceName,
  559.     IN      LPDWORD pcchInstanceNameLength,
  560.     IN      LPSTR   szParentName,
  561.     IN      LPDWORD pcchParentNameLength,
  562.     IN      LPDWORD lpIndex
  563. );
  564.  
  565. PDH_FUNCTION
  566. PdhValidatePathW (
  567.     IN      LPCWSTR szFullPathBuffer
  568. );
  569.  
  570. PDH_FUNCTION
  571. PdhValidatePathA (
  572.     IN      LPCSTR  szFullPathBuffer
  573. );
  574.  
  575. PDH_FUNCTION
  576. PdhGetDefaultPerfObjectW (
  577.     IN      LPCWSTR szDataSource,
  578.     IN      LPCWSTR szMachineName,
  579.     IN      LPWSTR  szDefaultObjectName,
  580.     IN      LPDWORD pcchBufferSize
  581. );
  582.  
  583. PDH_FUNCTION
  584. PdhGetDefaultPerfObjectA (
  585.     IN      LPCSTR  szDataSource,
  586.     IN      LPCSTR  szMachineName,
  587.     IN      LPSTR   szDefaultObjectName,
  588.     IN      LPDWORD pcchBufferSize
  589. );
  590.  
  591. PDH_FUNCTION
  592. PdhGetDefaultPerfCounterW (
  593.     IN      LPCWSTR szDataSource,
  594.     IN      LPCWSTR szMachineName,
  595.     IN      LPCWSTR szObjectName,
  596.     IN      LPWSTR  szDefaultCounterName,
  597.     IN      LPDWORD pcchBufferSize
  598. );
  599.  
  600. PDH_FUNCTION
  601. PdhGetDefaultPerfCounterA (
  602.     IN      LPCSTR  szDataSource,
  603.     IN      LPCSTR  szMachineName,
  604.     IN      LPCSTR  szObjectName,
  605.     IN      LPSTR   szDefaultCounterName,
  606.     IN      LPDWORD pcchBufferSize
  607. );
  608.  
  609. typedef PDH_STATUS (__stdcall *CounterPathCallBack)(DWORD);
  610.  
  611. typedef struct _BrowseDlgConfig_W {
  612.     // Configuration flags
  613.     DWORD   bIncludeInstanceIndex:1,
  614.             bSingleCounterPerAdd:1,
  615.             bSingleCounterPerDialog:1,
  616.             bLocalCountersOnly:1,
  617.             bWildCardInstances:1,
  618.             bHideDetailBox:1,
  619.             bInitializePath:1,
  620.             bDisableMachineSelection:1,
  621.             bIncludeCostlyObjects:1,
  622.             bReserved:23;
  623.  
  624.     HWND                hWndOwner;
  625.     LPWSTR              szDataSource;
  626.     LPWSTR              szReturnPathBuffer;
  627.     DWORD               cchReturnPathLength;
  628.     CounterPathCallBack pCallBack;
  629.     DWORD               dwCallBackArg;
  630.     PDH_STATUS          CallBackStatus;
  631.     DWORD               dwDefaultDetailLevel;
  632.     LPWSTR              szDialogBoxCaption;
  633. } PDH_BROWSE_DLG_CONFIG_W, *PPDH_BROWSE_DLG_CONFIG_W;
  634.  
  635. typedef struct _BrowseDlgConfig_A {
  636.     // Configuration flags
  637.     DWORD   bIncludeInstanceIndex:1,
  638.             bSingleCounterPerAdd:1,
  639.             bSingleCounterPerDialog:1,
  640.             bLocalCountersOnly:1,
  641.             bWildCardInstances:1,
  642.             bHideDetailBox:1,
  643.             bInitializePath:1,
  644.             bDisableMachineSelection:1,
  645.             bIncludeCostlyObjects:1,
  646.             bReserved:23;
  647.  
  648.     HWND                hWndOwner;
  649.     LPSTR               szDataSource;
  650.     LPSTR               szReturnPathBuffer;
  651.     DWORD               cchReturnPathLength;
  652.     CounterPathCallBack pCallBack;
  653.     DWORD               dwCallBackArg;
  654.     PDH_STATUS          CallBackStatus;
  655.     DWORD               dwDefaultDetailLevel;
  656.     LPSTR               szDialogBoxCaption;
  657. } PDH_BROWSE_DLG_CONFIG_A, *PPDH_BROWSE_DLG_CONFIG_A;
  658.  
  659. PDH_FUNCTION
  660. PdhBrowseCountersW (
  661.     IN      PPDH_BROWSE_DLG_CONFIG_W    pBrowseDlgData
  662. );
  663.  
  664. PDH_FUNCTION
  665. PdhBrowseCountersA (
  666.     IN      PPDH_BROWSE_DLG_CONFIG_A    pBrowseDlgData
  667. );
  668.  
  669. PDH_FUNCTION
  670. PdhExpandCounterPathW (
  671.     IN      LPCWSTR     szWildCardPath,
  672.     IN      LPWSTR      mszExpandedPathList,
  673.     IN      LPDWORD     pcchPathListLength
  674. );
  675.  
  676. PDH_FUNCTION
  677. PdhExpandCounterPathA (
  678.     IN      LPCSTR      szWildCardPath,
  679.     IN      LPSTR       mszExpandedPathList,
  680.     IN      LPDWORD     pcchPathListLength
  681. );
  682.  
  683. //
  684. //  v2.0 functions
  685. //
  686. PDH_FUNCTION
  687. PdhLookupPerfNameByIndexW (
  688.     LPCWSTR szMachineName,
  689.     DWORD   dwNameIndex,
  690.     LPWSTR  szNameBuffer,
  691.     LPDWORD pcchNameBufferSize
  692. );
  693.  
  694. PDH_FUNCTION
  695. PdhLookupPerfNameByIndexA (
  696.     LPCSTR  szMachineName,
  697.     DWORD   dwNameIndex,
  698.     LPSTR   szNameBuffer,
  699.     LPDWORD pcchNameBufferSize
  700. );
  701.  
  702. PDH_FUNCTION
  703. PdhLookupPerfIndexByNameW (
  704.     LPCWSTR szMachineName,
  705.     LPCWSTR szNameBuffer,
  706.     LPDWORD pdwIndex
  707. );
  708.  
  709. PDH_FUNCTION
  710. PdhLookupPerfIndexByNameA (
  711.     LPCSTR  szMachineName,
  712.     LPCSTR  szNameBuffer,
  713.     LPDWORD pdwIndex
  714. );
  715.  
  716. //
  717. //   Logging Functions
  718. //
  719.  
  720. #define PDH_LOG_READ_ACCESS     ((DWORD)0x00010000)
  721. #define PDH_LOG_WRITE_ACCESS    ((DWORD)0x00020000)
  722. #define PDH_LOG_ACCESS_MASK     ((DWORD)0x000F0000)
  723.  
  724. #define PDH_LOG_CREATE_NEW      ((DWORD)0x00000001)
  725. #define PDH_LOG_CREATE_ALWAYS   ((DWORD)0x00000002)
  726. #define PDH_LOG_OPEN_ALWAYS     ((DWORD)0x00000003)
  727. #define PDH_LOG_OPEN_EXISTING   ((DWORD)0x00000004)
  728. #define PDH_LOG_CREATE_MASK     ((DWORD)0x0000000F)
  729.  
  730. #define PDH_LOG_OPT_USER_STRING ((DWORD)0x01000000)
  731. #define PDH_LOG_OPT_MASK        ((DWORD)0x0F000000)
  732.  
  733. #define PDH_LOG_TYPE_UNDEFINED      0
  734. #define PDH_LOG_TYPE_CSV            1
  735. #define PDH_LOG_TYPE_TSV            2
  736. #define PDH_LOG_TYPE_BINARY         3
  737. #define PDH_LOG_TYPE_TRACE_KERNEL   4
  738. #define PDH_LOG_TYPE_TRACE_GENERIC  5
  739.  
  740. PDH_FUNCTION
  741. PdhOpenLogW (
  742.     IN      LPCWSTR szLogFileName,
  743.     IN      DWORD   dwAccessFlags,
  744.     IN      LPDWORD lpdwLogType,
  745.     IN      HQUERY  hQuery,
  746.     IN      DWORD   dwMaxRecords,
  747.     IN      LPCWSTR szUserCaption,
  748.     IN      HLOG    *phLog
  749. );
  750.  
  751. PDH_FUNCTION
  752. PdhOpenLogA (
  753.     IN      LPCSTR  szLogFileName,
  754.     IN      DWORD   dwAccessFlags,
  755.     IN      LPDWORD lpdwLogType,
  756.     IN      HQUERY  hQuery,
  757.     IN      DWORD   dwMaxRecords,
  758.     IN      LPCSTR  szUserCaption,
  759.     IN      HLOG    *phLog
  760. );
  761.  
  762. PDH_FUNCTION
  763. PdhUpdateLogW (
  764.     IN      HLOG    hLog,
  765.     IN      LPCWSTR szUserString
  766. );
  767.  
  768. PDH_FUNCTION
  769. PdhUpdateLogA (
  770.     IN      HLOG    hLog,
  771.     IN      LPCSTR  szUserString
  772. );
  773.  
  774. PDH_FUNCTION
  775. PdhGetLogFileSize (
  776.     IN  HLOG        hLog,
  777.     IN  LONGLONG    *llSize
  778. );
  779.  
  780. PDH_FUNCTION
  781. PdhCloseLog(
  782.     IN  HLOG        hLog,
  783.     IN  DWORD       dwFlags
  784. );
  785.  
  786. #define PDH_FLAGS_CLOSE_QUERY   ((DWORD)0x00000001)
  787. //
  788. //  Data source selection dialog
  789. //
  790. #define PDH_FLAGS_FILE_BROWSER_ONLY ((DWORD)0x00000001)
  791.  
  792. PDH_FUNCTION
  793. PdhSelectDataSourceW (
  794.     IN  HWND    hWndOwner,
  795.     IN  DWORD   dwFlags,
  796.     IN  LPWSTR  szDataSource,
  797.     IN  LPDWORD pcchBufferLength
  798. );
  799.  
  800. PDH_FUNCTION
  801. PdhSelectDataSourceA (
  802.     IN  HWND    hWndOwner,
  803.     IN  DWORD   dwFlags,
  804.     IN  LPSTR   szDataSource,
  805.     IN  LPDWORD pcchBufferLength
  806. );
  807.  
  808. BOOL
  809. PdhIsRealTimeQuery (
  810.     IN  HQUERY  hQuery
  811. );
  812.  
  813. PDH_FUNCTION
  814. PdhSetQueryTimeRange (
  815.     IN      HQUERY          hQuery,
  816.     IN      PPDH_TIME_INFO  pInfo
  817. );
  818.  
  819. PDH_FUNCTION
  820. PdhGetDataSourceTimeRangeW (
  821.     IN      LPCWSTR         szDataSource,
  822.     IN      LPDWORD         pdwNumEntries,
  823.     IN      PPDH_TIME_INFO  pInfo,
  824.     IN      LPDWORD         pdwBufferSize
  825. );
  826.  
  827. PDH_FUNCTION
  828. PdhGetDataSourceTimeRangeA (
  829.     IN      LPCSTR          szDataSource,
  830.     IN      LPDWORD         pdwNumEntries,
  831.     IN      PPDH_TIME_INFO  pInfo,
  832.     IN      LPDWORD         dwBufferSize
  833. );
  834.  
  835. PDH_FUNCTION
  836. PdhCollectQueryDataEx (
  837.     IN      HQUERY      hQuery,
  838.     IN      DWORD       dwIntervalTime,
  839.     IN      HANDLE      hNewDataEvent
  840. );
  841.  
  842. PDH_FUNCTION
  843. PdhFormatFromRawValue (
  844.     IN      DWORD               dwCounterType,
  845.     IN      DWORD               dwFormat,
  846.     IN      LONGLONG            *pTimeBase,
  847.     IN      PPDH_RAW_COUNTER    pRawValue1,
  848.     IN      PPDH_RAW_COUNTER    pRawValue2,
  849.     IN      PPDH_FMT_COUNTERVALUE   pFmtValue
  850. );
  851.  
  852. PDH_FUNCTION
  853. PdhGetCounterTimeBase (
  854.     IN  HCOUNTER    hCounter,
  855.     IN  LONGLONG    *pTimeBase
  856. );
  857.  
  858. PDH_FUNCTION
  859. PdhEncodeWmiPathA (
  860.     IN  LPCSTR                          szFullPathBufer,
  861.     IN  PPDH_DATA_ITEM_PATH_ELEMENTS_A  pDataItemPathElements,
  862.     IN  LPDWORD                         pdwBuferSize,
  863.     IN  LANGID                          LangId,
  864.     IN  DWORD                           dwFlags
  865. );
  866.  
  867. PDH_FUNCTION
  868. PdhEncodeWmiPathW (
  869.     IN  LPCWSTR                         szFullPathBufer,
  870.     IN  PPDH_DATA_ITEM_PATH_ELEMENTS_W  pDataItemPathElements,
  871.     IN  LPDWORD                         pdwBuferSize,
  872.     IN  LANGID                          LangId,
  873.     IN  DWORD                           dwFlags
  874. );
  875.  
  876. PDH_FUNCTION
  877. PdhDecodeWmiPathA (
  878.     IN  PPDH_DATA_ITEM_PATH_ELEMENTS_A  pDataItemPathElements,
  879.     IN  PPDH_COUNTER_PATH_ELEMENTS_A    pCounterPathElements,
  880.     IN  LPDWORD                         pdwBufferSize,
  881.     IN  LANGID                          LangId,
  882.     IN  DWORD                           dwFlags
  883. );
  884.  
  885.  
  886. PDH_FUNCTION
  887. PdhDecodeWmiPathW (
  888.     IN  PPDH_DATA_ITEM_PATH_ELEMENTS_W  pDataItemPathElements,
  889.     IN  PPDH_COUNTER_PATH_ELEMENTS_W    pCounterPathElements,
  890.     IN  LPDWORD                         pdwBufferSize,
  891.     IN  LANGID                          LangId,
  892.     IN  DWORD                           dwFlags
  893. );
  894.  
  895. PDH_FUNCTION
  896. PdhReadRawLogRecord (
  897.     IN  HLOG                    hLog,
  898.     IN  FILETIME                ftRecord,
  899.     IN  PPDH_RAW_LOG_RECORD     pRawLogRecord,
  900.     IN  LPDWORD                 pdwBufferLength
  901. );
  902.  
  903. // flags for the log service api's
  904. #define PDH_LOGSVC_NO_WAIT          ((DWORD)0x80000000)
  905. #define PDH_LOGSVC_ALL_QUERIES      ((DWORD)0x00000001)
  906. #define PDH_LOGSVC_TRACE_LOG        ((DWORD)0x00000002)
  907.  
  908. #define PDH_LOGSVC_CMD_START        ((DWORD)0x00000010)
  909. #define PDH_LOGSVC_CMD_STOP         ((DWORD)0x00000020)
  910.  
  911. #define PDH_LOGSVC_CTRL_ADD         ((DWORD)0x00000100)
  912. #define PDH_LOGSVC_CTRL_REMOVE      ((DWORD)0x00000200)
  913. #define PDH_LOGSVC_CTRL_INFO        ((DWORD)0x00000400)
  914.  
  915. #define PDH_LOGSVC_STATUS_RUNNING   ((DWORD)0x00001000)
  916. #define PDH_LOGSVC_STATUS_STOPPED   ((DWORD)0x00002000)
  917. #define PDH_LOGSVC_STATUS_PAUSED    ((DWORD)0x00004000)
  918. #define PDH_LOGSVC_STATUS_ERROR     ((DWORD)0x00008000)
  919. #define PDH_LOGSVC_STATUS_PENDING   ((DWORD)0x00010000)
  920.  
  921. #define PDH_LOGSVC_NAME_UNDEFINED  ((DWORD)-1)
  922. #define PDH_LOGSVC_NAME_MMDDHH     ((DWORD)0)
  923. #define PDH_LOGSVC_NAME_NNNNNN     ((DWORD)1)
  924. #define PDH_LOGSVC_NAME_YYDDD      ((DWORD)2)
  925. #define PDH_LOGSVC_NAME_YYMM       ((DWORD)3)
  926. #define PDH_LOGSVC_NAME_YYMMDD     ((DWORD)4)
  927. #define PDH_LOGSVC_NAME_YYMMDDHH   ((DWORD)5)
  928.  
  929. #define PDH_LOGSVC_RENAME_UNDEFINED ((DWORD)-1)
  930. #define PDH_LOGSVC_RENAME_HOURS    ((DWORD)0)
  931. #define PDH_LOGSVC_RENAME_DAYS     ((DWORD)1)
  932. #define PDH_LOGSVC_RENAME_MONTHS   ((DWORD)2)
  933. #define PDH_LOGSVC_RENAME_KBYTES   ((DWORD)3)
  934. #define PDH_LOGSVC_RENAME_MBYTES   ((DWORD)4)
  935.  
  936. PDH_FUNCTION
  937. PdhLogServiceCommandA (
  938.     IN  LPCSTR          szMachineName,
  939.     IN  LPCSTR          szQueryName,
  940.     IN  DWORD           dwFlags,
  941.     IN  LPDWORD         pdwStatus
  942. );
  943.  
  944. PDH_FUNCTION
  945. PdhLogServiceCommandW (
  946.     IN  LPCWSTR         szMachineName,
  947.     IN  LPCWSTR         szQueryName,
  948.     IN  DWORD           dwFlags,
  949.     IN  LPDWORD         pdwStatus
  950. );
  951.  
  952. PDH_FUNCTION
  953. PdhLogServiceControlA (
  954.     IN  LPCSTR          szMachineName,
  955.     IN  LPCSTR          szQueryName,
  956.     IN  DWORD           dwFlags,
  957.     IN  PPDH_LOG_SERVICE_QUERY_INFO_A pInfoBuffer,
  958.     IN  LPDWORD         pdwBufferSize
  959. );
  960.  
  961. PDH_FUNCTION
  962. PdhLogServiceControlW (
  963.     IN  LPCWSTR         szMachineName,
  964.     IN  LPCWSTR         szQueryName,
  965.     IN  DWORD           dwFlags,
  966.     IN  PPDH_LOG_SERVICE_QUERY_INFO_W pInfoBuffer,
  967.     IN  LPDWORD         pdwBufferSize
  968. );
  969. //
  970. //   Unicode/ANSI compatibility section
  971. //
  972. #ifdef UNICODE
  973. #ifndef _UNICODE
  974. #define _UNICODE
  975. #endif
  976. #endif
  977.  
  978. #ifdef _UNICODE
  979. #ifndef UNICODE
  980. #define UNICODE
  981. #endif
  982. #endif
  983.  
  984. #ifdef UNICODE
  985. // start of UNICODE definitions
  986. #define PdhOpenQuery                PdhOpenQueryW
  987. #define PdhAddCounter                PdhAddCounterW
  988. #define PdhGetCounterInfo           PdhGetCounterInfoW
  989. #define PDH_COUNTER_INFO            PDH_COUNTER_INFO_W
  990. #define PPDH_COUNTER_INFO            PPDH_COUNTER_INFO_W
  991. #define PdhConnectMachine           PdhConnectMachineW
  992. #define PdhEnumMachines             PdhEnumMachinesW
  993. #define PdhEnumObjects              PdhEnumObjectsW
  994. #define PdhEnumObjectItems          PdhEnumObjectItemsW
  995. #define PdhMakeCounterPath          PdhMakeCounterPathW
  996. #define PDH_COUNTER_PATH_ELEMENTS   PDH_COUNTER_PATH_ELEMENTS_W
  997. #define PPDH_COUNTER_PATH_ELEMENTS  PPDH_COUNTER_PATH_ELEMENTS_W
  998. #define PdhParseCounterPath         PdhParseCounterPathW
  999. #define PdhParseInstanceName        PdhParseInstanceNameW
  1000. #define PdhValidatePath             PdhValidatePathW
  1001. #define PdhGetDefaultPerfObject     PdhGetDefaultPerfObjectW
  1002. #define PdhGetDefaultPerfCounter    PdhGetDefaultPerfCounterW
  1003. #define PdhBrowseCounters           PdhBrowseCountersW
  1004. #define PDH_BROWSE_DLG_CONFIG       PDH_BROWSE_DLG_CONFIG_W
  1005. #define PPDH_BROWSE_DLG_CONFIG      PPDH_BROWSE_DLG_CONFIG_W
  1006. #define PdhExpandCounterPath        PdhExpandCounterPathW
  1007. // v2.0 functions
  1008. #define PDH_FMT_COUNTERVALUE_ITEM   PDH_FMT_COUNTERVALUE_ITEM_W
  1009. #define PPDH_FMT_COUNTERVALUE_ITEM  PPDH_FMT_COUNTERVALUE_ITEM_W
  1010. #define PDH_RAW_COUNTER_ITEM        PDH_RAW_COUNTER_ITEM_W
  1011. #define PPDH_RAW_COUNTER_ITEM       PPDH_RAW_COUNTER_ITEM_W
  1012. #define PdhGetFormattedCounterArray PdhGetFormattedCounterArrayW
  1013. #define PdhGetRawCounterArray       PdhGetRawCounterArrayW
  1014. #define PdhLookupPerfNameByIndex    PdhLookupPerfNameByIndexW
  1015. #define PdhLookupIndexByPerfName    PdhLookupIndexByPerfNameW
  1016. #define PdhOpenLog                  PdhOpenLogW
  1017. #define PdhUpdateLog                PdhUpdateLogW
  1018. #define PdhSelectDataSource         PdhSelectDataSourceW
  1019. #define PdhGetDataSourceTimeRange   PdhGetDataSourceTimeRangeW
  1020. #define PDH_DATA_ITEM_PATH_ELEMENTS PDH_DATA_ITEM_PATH_ELEMENTS_W
  1021. #define PPDH_DATA_ITEM_PATH_ELEMENTS PPDH_DATA_ITEM_PATH_ELEMENTS_W
  1022. #define PdhEncodeWmiPath            PdhEncodeWmiPathW
  1023. #define PdhDecodeWmiPath            PdhDecodeWmiPathW
  1024. #define PDH_LOG_SERVICE_QUERY_INFO  PDH_LOG_SERVICE_QUERY_INFO_W
  1025. #define PPDH_LOG_SERVICE_QUERY_INFO PPDH_LOG_SERVICE_QUERY_INFO_W
  1026. #define PdhLogServiceControl        PdhLogServiceControlW
  1027. #define PdhLogServiceQuery          PdhLogServiceQueryW
  1028.  
  1029. // end of UNICODE definitions
  1030. #else
  1031. // start of ANSI definitions
  1032. #define PdhOpenQuery                PdhOpenQueryA
  1033. #define PdhAddCounter                PdhAddCounterA
  1034. #define PdhGetCounterInfo           PdhGetCounterInfoA
  1035. #define PDH_COUNTER_INFO            PDH_COUNTER_INFO_A
  1036. #define PPDH_COUNTER_INFO            PPDH_COUNTER_INFO_A
  1037. #define PdhConnectMachine           PdhConnectMachineA
  1038. #define PdhEnumMachines             PdhEnumMachinesA
  1039. #define PdhEnumObjects              PdhEnumObjectsA
  1040. #define PdhEnumObjectItems          PdhEnumObjectItemsA
  1041. #define PdhMakeCounterPath          PdhMakeCounterPathA
  1042. #define PDH_COUNTER_PATH_ELEMENTS   PDH_COUNTER_PATH_ELEMENTS_A
  1043. #define PPDH_COUNTER_PATH_ELEMENTS  PPDH_COUNTER_PATH_ELEMENTS_A
  1044. #define PdhParseCounterPath         PdhParseCounterPathA
  1045. #define PdhParseInstanceName        PdhParseInstanceNameA
  1046. #define PdhValidatePath             PdhValidatePathA
  1047. #define PdhGetDefaultPerfObject     PdhGetDefaultPerfObjectA
  1048. #define PdhGetDefaultPerfCounter    PdhGetDefaultPerfCounterA
  1049. #define PdhBrowseCounters           PdhBrowseCountersA
  1050. #define PDH_BROWSE_DLG_CONFIG       PDH_BROWSE_DLG_CONFIG_A
  1051. #define PPDH_BROWSE_DLG_CONFIG      PPDH_BROWSE_DLG_CONFIG_A
  1052. #define PdhExpandCounterPath        PdhExpandCounterPathA
  1053. // v2.0 functions
  1054. #define PDH_FMT_COUNTERVALUE_ITEM   PDH_FMT_COUNTERVALUE_ITEM_A
  1055. #define PPDH_FMT_COUNTERVALUE_ITEM  PPDH_FMT_COUNTERVALUE_ITEM_A
  1056. #define PDH_RAW_COUNTER_ITEM        PDH_RAW_COUNTER_ITEM_A 
  1057. #define PPDH_RAW_COUNTER_ITEM       PPDH_RAW_COUNTER_ITEM_A
  1058. #define PdhGetFormattedCounterArray PdhGetFormattedCounterArrayA
  1059. #define PdhGetRawCounterArray       PdhGetRawCounterArrayA
  1060. #define PdhLookupPerfNameByIndex    PdhLookupPerfNameByIndexA
  1061. #define PdhLookupIndexByPerfName    PdhLookupIndexByPerfNameA
  1062. #define PdhOpenLog                  PdhOpenLogA
  1063. #define PdhUpdateLog                PdhUpdateLogA
  1064. #define PdhSelectDataSource         PdhSelectDataSourceA
  1065. #define PdhGetDataSourceTimeRange   PdhGetDataSourceTimeRangeA
  1066. #define PDH_DATA_ITEM_PATH_ELEMENTS PDH_DATA_ITEM_PATH_ELEMENTS_A
  1067. #define PPDH_DATA_ITEM_PATH_ELEMENTS PPDH_DATA_ITEM_PATH_ELEMENTS_A
  1068. #define PdhEncodeWmiPath            PdhEncodeWmiPathA
  1069. #define PdhDecodeWmiPath            PdhDecodeWmiPathA
  1070. #define PDH_LOG_SERVICE_QUERY_INFO  PDH_LOG_SERVICE_QUERY_INFO_A
  1071. #define PPDH_LOG_SERVICE_QUERY_INFO PPDH_LOG_SERVICE_QUERY_INFO_A
  1072. #define PdhLogServiceControl        PdhLogServiceControlA
  1073. #define PdhLogServiceQuery          PdhLogServiceQueryA
  1074.  
  1075. // end of ANSI definitions
  1076. #endif  // UNICODE
  1077.  
  1078. #ifdef __cplusplus
  1079. }
  1080. #endif
  1081.  
  1082. #endif //_PDH_H_
  1083.