/*++ Copyright (C) 1996-1999 Microsoft Corporation Module Name: perfdata.h Abstract: --*/ #ifndef _PERFDATA_H_ #define _PERFDATA_H_ typedef LPVOID LPMEMORY; typedef HGLOBAL HMEMORY; #ifndef UNICODE_NULL // then the unicode string struct is probably not defined either typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #define UNICODE_NULL ((WCHAR)0) // winnt #endif LPWSTR * BuildNameTable( LPWSTR szComputerName, // computer to query names from LANGID LangId, // language ID PPERF_MACHINE pMachine // to update member fields ); __inline PPERF_OBJECT_TYPE FirstObject( PPERF_DATA_BLOCK pPerfData ) { PPERF_OBJECT_TYPE pObject = NULL; if (pPerfData != NULL && pPerfData->TotalByteLength > pPerfData->HeaderLength) { pObject = (PPERF_OBJECT_TYPE) (((LPBYTE) pPerfData) + pPerfData->HeaderLength); if (pPerfData->TotalByteLength < pPerfData->HeaderLength + pObject->TotalByteLength) { pObject = NULL; } } return pObject; } __inline PPERF_OBJECT_TYPE NextObject( PPERF_DATA_BLOCK pPerfData, PPERF_OBJECT_TYPE pThisObject ) { PPERF_OBJECT_TYPE pObject = NULL; if (pPerfData != NULL && pThisObject != NULL) { if (pThisObject->TotalByteLength != 0) { PPERF_OBJECT_TYPE pEndObject = (PPERF_OBJECT_TYPE) (((PCHAR) pPerfData) + pPerfData->TotalByteLength); PPERF_OBJECT_TYPE pNextObject = (PPERF_OBJECT_TYPE) (((PCHAR) pThisObject) + pThisObject->TotalByteLength); if (pNextObject < pEndObject) { pObject = pNextObject; } } } return pObject; } PPERF_OBJECT_TYPE GetObjectDefByTitleIndex( PPERF_DATA_BLOCK pDataBlock, DWORD ObjectTypeTitleIndex ); PPERF_OBJECT_TYPE GetObjectDefByName( PPERF_DATA_BLOCK pDataBlock, DWORD dwLastNameIndex, LPCWSTR * NameArray, LPCWSTR szObjectName ); __inline PPERF_INSTANCE_DEFINITION FirstInstance( PPERF_OBJECT_TYPE pObject ) { PPERF_INSTANCE_DEFINITION pInstDef = NULL; if (pObject != NULL && pObject->TotalByteLength > pObject->DefinitionLength && pObject->DefinitionLength > pObject->HeaderLength) { pInstDef = (PPERF_INSTANCE_DEFINITION) (((LPBYTE) pObject) + pObject->DefinitionLength); if (pObject->TotalByteLength < pObject->DefinitionLength + pInstDef->ByteLength) { pInstDef = NULL; } } return pInstDef; } __inline PPERF_INSTANCE_DEFINITION NextInstance( PPERF_OBJECT_TYPE pObject, PPERF_INSTANCE_DEFINITION pInstDef ) { PPERF_INSTANCE_DEFINITION pNextInst = NULL; if (pObject != NULL && pInstDef != NULL) { PPERF_OBJECT_TYPE pEndObject = (PPERF_OBJECT_TYPE) (((PCHAR) pObject) + pObject->TotalByteLength); PPERF_COUNTER_BLOCK pCounterBlock = (PPERF_COUNTER_BLOCK) (((PCHAR) pInstDef) + pInstDef->ByteLength); if ((LPVOID) pCounterBlock < (LPVOID) pEndObject) { pNextInst = (PPERF_INSTANCE_DEFINITION) (((PCHAR) pCounterBlock) + pCounterBlock->ByteLength); if ((LPVOID) pNextInst >= (LPVOID) pEndObject) { pNextInst = NULL; } } } return pNextInst; } PPERF_INSTANCE_DEFINITION GetInstance( PERF_OBJECT_TYPE *pObjectDef, LONG InstanceNumber ); PPERF_INSTANCE_DEFINITION GetInstanceByUniqueId( PERF_OBJECT_TYPE *pObjectDef, LONG InstanceUniqueId ); DWORD GetInstanceNameStr( PPERF_INSTANCE_DEFINITION pInstance, LPWSTR * lpszInstance, DWORD dwCodePage ); DWORD GetFullInstanceNameStr( PPERF_DATA_BLOCK pPerfData, PPERF_OBJECT_TYPE pObjectDef, PPERF_INSTANCE_DEFINITION pInstanceDef, LPWSTR szInstanceName, DWORD dwInstanceName ); BOOL IsMatchingInstance( PPERF_INSTANCE_DEFINITION pInstanceDef, DWORD dwCodePage, LPWSTR szInstanceNameToMatch, DWORD dwInstanceNameLength ); __inline PPERF_COUNTER_DEFINITION FirstCounter( PPERF_OBJECT_TYPE pObject ) { PPERF_COUNTER_DEFINITION pCounter = NULL; if (pObject != NULL && pObject->TotalByteLength >= pObject->DefinitionLength && pObject->DefinitionLength > pObject->HeaderLength) { pCounter = (PPERF_COUNTER_DEFINITION) (((LPBYTE) pObject) + pObject->HeaderLength); if (pObject->DefinitionLength < pObject->HeaderLength + pCounter->ByteLength) { pCounter = NULL; } } return pCounter; } __inline PPERF_COUNTER_DEFINITION NextCounter( PPERF_OBJECT_TYPE pObject, PPERF_COUNTER_DEFINITION pCounterDef ) { PPERF_COUNTER_DEFINITION pCounter = NULL; if (pObject != NULL && pCounterDef != NULL) { PPERF_COUNTER_DEFINITION pEndCounter = (PPERF_COUNTER_DEFINITION) (((PCHAR) pObject) + pObject->DefinitionLength); if (pCounterDef < pEndCounter && pCounterDef->ByteLength > 0) { pCounter = (PPERF_COUNTER_DEFINITION) (((PCHAR) pCounterDef) + pCounterDef->ByteLength); if (pCounter >= pEndCounter) { pCounter = NULL; } } } return pCounter; } PPERF_COUNTER_DEFINITION GetCounterDefByName( PPERF_OBJECT_TYPE pObject, DWORD dwLastNameIndex, LPWSTR * NameArray, LPWSTR szCounterName ); PPERF_COUNTER_DEFINITION GetCounterDefByTitleIndex( PPERF_OBJECT_TYPE pObjectDef, BOOL bBaseCounterDef, DWORD CounterTitleIndex ); LONG GetSystemPerfData( HKEY hKeySystem, PPERF_DATA_BLOCK * pPerfData, LPWSTR szObjectList, BOOL bCollectCostlyData ); PPERF_INSTANCE_DEFINITION GetInstanceByName( PPERF_DATA_BLOCK pDataBlock, PPERF_OBJECT_TYPE pObjectDef, LPWSTR pInstanceName, LPWSTR pParentName, DWORD dwIndex ); __inline LPWSTR GetInstanceName( PPERF_INSTANCE_DEFINITION pInstDef ) { LPWSTR szInstance = NULL; if (pInstDef != NULL && (pInstDef->ByteLength >= pInstDef->NameOffset + pInstDef->NameLength)) { szInstance = (LPWSTR) (((ULONG_PTR) pInstDef) + pInstDef->NameOffset); } return szInstance; } __inline PVOID GetCounterDataPtr( PPERF_OBJECT_TYPE pObjectDef, PPERF_COUNTER_DEFINITION pCounterDef ) { PPERF_COUNTER_BLOCK pCtrBlock; pCtrBlock = (PPERF_COUNTER_BLOCK) ((PCHAR)pObjectDef + pObjectDef->DefinitionLength); return (pCtrBlock->ByteLength >= pCounterDef->CounterOffset + pCounterDef->CounterSize) ? (PVOID) ((PCHAR) pCtrBlock + pCounterDef->CounterOffset) : NULL; } __inline PVOID GetInstanceCounterDataPtr( PPERF_OBJECT_TYPE pObjectDef, PPERF_INSTANCE_DEFINITION pInstanceDef, PPERF_COUNTER_DEFINITION pCounterDef ) { PPERF_COUNTER_BLOCK pCtrBlock; UNREFERENCED_PARAMETER(pObjectDef); pCtrBlock = (PPERF_COUNTER_BLOCK) ((PCHAR)pInstanceDef + pInstanceDef->ByteLength); return (pCtrBlock->ByteLength >= pCounterDef->CounterOffset + pCounterDef->CounterSize) ? (PVOID) ((PCHAR) pCtrBlock + pCounterDef->CounterOffset) : NULL; } #endif //_PERFDATA_H_