Leaked source code of windows server 2003
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.

290 lines
7.6 KiB

  1. /*++
  2. Copyright (C) 1996-1999 Microsoft Corporation
  3. Module Name:
  4. perfdata.h
  5. Abstract:
  6. <abstract>
  7. --*/
  8. #ifndef _PERFDATA_H_
  9. #define _PERFDATA_H_
  10. typedef LPVOID LPMEMORY;
  11. typedef HGLOBAL HMEMORY;
  12. #ifndef UNICODE_NULL
  13. // then the unicode string struct is probably not defined either
  14. typedef struct _UNICODE_STRING {
  15. USHORT Length;
  16. USHORT MaximumLength;
  17. PWSTR Buffer;
  18. } UNICODE_STRING, *PUNICODE_STRING;
  19. #define UNICODE_NULL ((WCHAR)0) // winnt
  20. #endif
  21. LPWSTR *
  22. BuildNameTable(
  23. LPWSTR szComputerName, // computer to query names from
  24. LANGID LangId, // language ID
  25. PPERF_MACHINE pMachine // to update member fields
  26. );
  27. __inline
  28. PPERF_OBJECT_TYPE
  29. FirstObject(
  30. PPERF_DATA_BLOCK pPerfData
  31. )
  32. {
  33. PPERF_OBJECT_TYPE pObject = NULL;
  34. if (pPerfData != NULL && pPerfData->TotalByteLength > pPerfData->HeaderLength) {
  35. pObject = (PPERF_OBJECT_TYPE) (((LPBYTE) pPerfData) + pPerfData->HeaderLength);
  36. if (pPerfData->TotalByteLength < pPerfData->HeaderLength + pObject->TotalByteLength) {
  37. pObject = NULL;
  38. }
  39. }
  40. return pObject;
  41. }
  42. __inline
  43. PPERF_OBJECT_TYPE
  44. NextObject(
  45. PPERF_DATA_BLOCK pPerfData,
  46. PPERF_OBJECT_TYPE pThisObject
  47. )
  48. {
  49. PPERF_OBJECT_TYPE pObject = NULL;
  50. if (pPerfData != NULL && pThisObject != NULL) {
  51. if (pThisObject->TotalByteLength != 0) {
  52. PPERF_OBJECT_TYPE pEndObject = (PPERF_OBJECT_TYPE) (((PCHAR) pPerfData) + pPerfData->TotalByteLength);
  53. PPERF_OBJECT_TYPE pNextObject = (PPERF_OBJECT_TYPE) (((PCHAR) pThisObject) + pThisObject->TotalByteLength);
  54. if (pNextObject < pEndObject) {
  55. pObject = pNextObject;
  56. }
  57. }
  58. }
  59. return pObject;
  60. }
  61. PPERF_OBJECT_TYPE
  62. GetObjectDefByTitleIndex(
  63. PPERF_DATA_BLOCK pDataBlock,
  64. DWORD ObjectTypeTitleIndex
  65. );
  66. PPERF_OBJECT_TYPE
  67. GetObjectDefByName(
  68. PPERF_DATA_BLOCK pDataBlock,
  69. DWORD dwLastNameIndex,
  70. LPCWSTR * NameArray,
  71. LPCWSTR szObjectName
  72. );
  73. __inline
  74. PPERF_INSTANCE_DEFINITION
  75. FirstInstance(
  76. PPERF_OBJECT_TYPE pObject
  77. )
  78. {
  79. PPERF_INSTANCE_DEFINITION pInstDef = NULL;
  80. if (pObject != NULL && pObject->TotalByteLength > pObject->DefinitionLength
  81. && pObject->DefinitionLength > pObject->HeaderLength) {
  82. pInstDef = (PPERF_INSTANCE_DEFINITION) (((LPBYTE) pObject) + pObject->DefinitionLength);
  83. if (pObject->TotalByteLength < pObject->DefinitionLength + pInstDef->ByteLength) {
  84. pInstDef = NULL;
  85. }
  86. }
  87. return pInstDef;
  88. }
  89. __inline
  90. PPERF_INSTANCE_DEFINITION
  91. NextInstance(
  92. PPERF_OBJECT_TYPE pObject,
  93. PPERF_INSTANCE_DEFINITION pInstDef
  94. )
  95. {
  96. PPERF_INSTANCE_DEFINITION pNextInst = NULL;
  97. if (pObject != NULL && pInstDef != NULL) {
  98. PPERF_OBJECT_TYPE pEndObject = (PPERF_OBJECT_TYPE) (((PCHAR) pObject) + pObject->TotalByteLength);
  99. PPERF_COUNTER_BLOCK pCounterBlock = (PPERF_COUNTER_BLOCK) (((PCHAR) pInstDef) + pInstDef->ByteLength);
  100. if ((LPVOID) pCounterBlock < (LPVOID) pEndObject) {
  101. pNextInst = (PPERF_INSTANCE_DEFINITION) (((PCHAR) pCounterBlock) + pCounterBlock->ByteLength);
  102. if ((LPVOID) pNextInst >= (LPVOID) pEndObject) {
  103. pNextInst = NULL;
  104. }
  105. }
  106. }
  107. return pNextInst;
  108. }
  109. PPERF_INSTANCE_DEFINITION
  110. GetInstance(
  111. PERF_OBJECT_TYPE *pObjectDef,
  112. LONG InstanceNumber
  113. );
  114. PPERF_INSTANCE_DEFINITION
  115. GetInstanceByUniqueId(
  116. PERF_OBJECT_TYPE *pObjectDef,
  117. LONG InstanceUniqueId
  118. );
  119. DWORD
  120. GetInstanceNameStr(
  121. PPERF_INSTANCE_DEFINITION pInstance,
  122. LPWSTR * lpszInstance,
  123. DWORD dwCodePage
  124. );
  125. DWORD
  126. GetFullInstanceNameStr(
  127. PPERF_DATA_BLOCK pPerfData,
  128. PPERF_OBJECT_TYPE pObjectDef,
  129. PPERF_INSTANCE_DEFINITION pInstanceDef,
  130. LPWSTR szInstanceName,
  131. DWORD dwInstanceName
  132. );
  133. BOOL IsMatchingInstance(
  134. PPERF_INSTANCE_DEFINITION pInstanceDef,
  135. DWORD dwCodePage,
  136. LPWSTR szInstanceNameToMatch,
  137. DWORD dwInstanceNameLength
  138. );
  139. __inline
  140. PPERF_COUNTER_DEFINITION
  141. FirstCounter(
  142. PPERF_OBJECT_TYPE pObject
  143. )
  144. {
  145. PPERF_COUNTER_DEFINITION pCounter = NULL;
  146. if (pObject != NULL && pObject->TotalByteLength >= pObject->DefinitionLength
  147. && pObject->DefinitionLength > pObject->HeaderLength) {
  148. pCounter = (PPERF_COUNTER_DEFINITION) (((LPBYTE) pObject) + pObject->HeaderLength);
  149. if (pObject->DefinitionLength < pObject->HeaderLength + pCounter->ByteLength) {
  150. pCounter = NULL;
  151. }
  152. }
  153. return pCounter;
  154. }
  155. __inline
  156. PPERF_COUNTER_DEFINITION
  157. NextCounter(
  158. PPERF_OBJECT_TYPE pObject,
  159. PPERF_COUNTER_DEFINITION pCounterDef
  160. )
  161. {
  162. PPERF_COUNTER_DEFINITION pCounter = NULL;
  163. if (pObject != NULL && pCounterDef != NULL) {
  164. PPERF_COUNTER_DEFINITION pEndCounter =
  165. (PPERF_COUNTER_DEFINITION) (((PCHAR) pObject) + pObject->DefinitionLength);
  166. if (pCounterDef < pEndCounter && pCounterDef->ByteLength > 0) {
  167. pCounter = (PPERF_COUNTER_DEFINITION) (((PCHAR) pCounterDef) + pCounterDef->ByteLength);
  168. if (pCounter >= pEndCounter) {
  169. pCounter = NULL;
  170. }
  171. }
  172. }
  173. return pCounter;
  174. }
  175. PPERF_COUNTER_DEFINITION
  176. GetCounterDefByName(
  177. PPERF_OBJECT_TYPE pObject,
  178. DWORD dwLastNameIndex,
  179. LPWSTR * NameArray,
  180. LPWSTR szCounterName
  181. );
  182. PPERF_COUNTER_DEFINITION
  183. GetCounterDefByTitleIndex(
  184. PPERF_OBJECT_TYPE pObjectDef,
  185. BOOL bBaseCounterDef,
  186. DWORD CounterTitleIndex
  187. );
  188. LONG
  189. GetSystemPerfData(
  190. HKEY hKeySystem,
  191. PPERF_DATA_BLOCK * pPerfData,
  192. LPWSTR szObjectList,
  193. BOOL bCollectCostlyData
  194. );
  195. PPERF_INSTANCE_DEFINITION
  196. GetInstanceByName(
  197. PPERF_DATA_BLOCK pDataBlock,
  198. PPERF_OBJECT_TYPE pObjectDef,
  199. LPWSTR pInstanceName,
  200. LPWSTR pParentName,
  201. DWORD dwIndex
  202. );
  203. __inline
  204. LPWSTR GetInstanceName(
  205. PPERF_INSTANCE_DEFINITION pInstDef
  206. )
  207. {
  208. LPWSTR szInstance = NULL;
  209. if (pInstDef != NULL && (pInstDef->ByteLength >= pInstDef->NameOffset + pInstDef->NameLength)) {
  210. szInstance = (LPWSTR) (((ULONG_PTR) pInstDef) + pInstDef->NameOffset);
  211. }
  212. return szInstance;
  213. }
  214. __inline
  215. PVOID
  216. GetCounterDataPtr(
  217. PPERF_OBJECT_TYPE pObjectDef,
  218. PPERF_COUNTER_DEFINITION pCounterDef
  219. )
  220. {
  221. PPERF_COUNTER_BLOCK pCtrBlock;
  222. pCtrBlock = (PPERF_COUNTER_BLOCK) ((PCHAR)pObjectDef + pObjectDef->DefinitionLength);
  223. return (pCtrBlock->ByteLength >= pCounterDef->CounterOffset + pCounterDef->CounterSize)
  224. ? (PVOID) ((PCHAR) pCtrBlock + pCounterDef->CounterOffset)
  225. : NULL;
  226. }
  227. __inline
  228. PVOID
  229. GetInstanceCounterDataPtr(
  230. PPERF_OBJECT_TYPE pObjectDef,
  231. PPERF_INSTANCE_DEFINITION pInstanceDef,
  232. PPERF_COUNTER_DEFINITION pCounterDef
  233. )
  234. {
  235. PPERF_COUNTER_BLOCK pCtrBlock;
  236. UNREFERENCED_PARAMETER(pObjectDef);
  237. pCtrBlock = (PPERF_COUNTER_BLOCK) ((PCHAR)pInstanceDef + pInstanceDef->ByteLength);
  238. return (pCtrBlock->ByteLength >= pCounterDef->CounterOffset + pCounterDef->CounterSize)
  239. ? (PVOID) ((PCHAR) pCtrBlock + pCounterDef->CounterOffset)
  240. : NULL;
  241. }
  242. #endif //_PERFDATA_H_