Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1112 lines
31 KiB

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