windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/loadbal/pdh/pdhidef.h

388 lines
9.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (C) 1996 Microsoft Corporation
Module Name:
pdhidef.h
Abstract:
function definitions used internally by the performance data helper
functions
--*/
#ifndef _PDHI_DEFS_H_
#define _PDHI_DEFS_H_
#include "pdhitype.h" // required for data type definitions
#include "pdhmsg.h" // error message definitions
#include "strings.h" // for string constants
#if DBG
#define STATIC_PDH_FUNCTION PDH_STATUS __stdcall
#define STATIC_BOOL BOOL __stdcall
#define STATIC_DWORD DWORD __stdcall
#else
#define STATIC_PDH_FUNCTION static PDH_STATUS __stdcall
#define STATIC_BOOL static BOOL __stdcall
#define STATIC_DWORD static DWORD __stdcall
#endif
// global variable declarations
extern HANDLE ThisDLLHandle;
extern WCHAR szStaticLocalMachineName[];
extern HANDLE hPdhDataMutex;
extern HANDLE hPdhHeap;
extern HANDLE hEventLog;
#ifndef _SHOW_PDH_MEM_ALLOCS
#define G_ALLOC(s) HeapAlloc (hPdhHeap, HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, s)
#define G_REALLOC(h,s) HeapReAlloc (hPdhHeap, HEAP_GENERATE_EXCEPTIONS, h, s)
#define G_FREE(h) HeapFree (hPdhHeap, 0, h)
#define G_SIZE(h) HeapSize (hPdhHeap, 0, h)
#else
__inline
LPVOID
PdhiHeapAlloc(LPSTR szSourceFileName, DWORD dwLineNo, DWORD s)
{
LPVOID lpRetVal;
CHAR szOutputString[MAX_PATH];
lpRetVal = HeapAlloc (hPdhHeap, HEAP_ZERO_MEMORY, s);
sprintf (szOutputString, "\n%s (%d): +%d Bytes Allocated to 0x%8.8x",
szSourceFileName, dwLineNo,
(lpRetVal != NULL ? s : 0), (DWORD)lpRetVal);
OutputDebugStringA (szOutputString);
return lpRetVal;
}
__inline
LPVOID
PdhiHeapReAlloc(LPSTR szSourceFileName, DWORD dwLineNo,
LPVOID h, DWORD s)
{
LPVOID lpRetVal;
CHAR szOutputString[MAX_PATH];
DWORD dwBeforeSize;
dwBeforeSize = HeapSize (hPdhHeap, 0, h);
lpRetVal = HeapReAlloc (hPdhHeap, 0, h, s);
sprintf (szOutputString, "\n%s (%d): -%d Bytes Freed from 0x%8.8x\n%s (%d): +%d Bytes Reallocd to 0x%8.8x",
szSourceFileName, dwLineNo,
dwBeforeSize, (DWORD) h,
szSourceFileName, dwLineNo,
(lpRetVal != NULL ? s : 0), (DWORD)lpRetVal);
OutputDebugStringA (szOutputString);
return lpRetVal;
}
__inline
BOOL
PdhiHeapFree(LPSTR szSourceFileName, DWORD dwLineNo,
LPVOID h)
{
BOOL bRetVal;
CHAR szOutputString[MAX_PATH];
DWORD dwBlockSize;
dwBlockSize = HeapSize (hPdhHeap, 0, h);
bRetVal = HeapFree (hPdhHeap, 0, h);
sprintf (szOutputString, "\n%s (%d): -%d Bytes Freed from 0x%8.8x",
szSourceFileName, dwLineNo,
(bRetVal ? dwBlockSize : 0), (DWORD)h);
OutputDebugStringA (szOutputString);
return bRetVal;
}
#define G_ALLOC(s) PdhiHeapAlloc (__FILE__, __LINE__, s)
#define G_REALLOC(h,s) PdhiHeapReAlloc (__FILE__, __LINE__, h, s)
#define G_FREE(h) PdhiHeapFree (__FILE__, __LINE__, h)
#define G_SIZE(h) HeapSize (hPdhHeap, 0, h)
#endif
// (assumes dword is 4 bytes long and pointer is a dword in size)
#define ALIGN_ON_DWORD(x) ((VOID *)( ((DWORD)(x) & 0x00000003) ? ( ((DWORD)(x) & 0xFFFFFFFC) + 4 ) : ( (DWORD)(x) ) ))
#define DWORD_MULTIPLE(x) ((((x)+sizeof(DWORD)-1)/sizeof(DWORD))*sizeof(DWORD))
#define CLEAR_FIRST_FOUR_BYTES(x) *(DWORD *)(x) = 0L
// (assumes QuadWORD is 8 bytes long and pointer is dword in size)
#define ALIGN_ON_QWORD(x) ((VOID *)( ((DWORD)(x) & 0x00000007) ? ( ((DWORD)(x) & 0xFFFFFFF8) + 8 ) : ( (DWORD)(x) ) ))
#define QWORD_MULTIPLE(x) ((((x)+sizeof(LONGLONG)-1)/sizeof(LONGLONG))*sizeof(LONGLONG))
#define CLEAR_FIRST_EIGHT_BYTES(x) *(LONGLONG *)(x) = 0L
#define WAIT_FOR_AND_LOCK_MUTEX(h) (h != NULL ? WaitForSingleObject(h, 60000) : WAIT_TIMEOUT)
#define RELEASE_MUTEX(h) (h != NULL ? ReleaseMutex(h) : TRUE)
// special perf counter type used by text log files
// value is stored as a double precision floating point value
#define PERF_DOUBLE_RAW (0x00000400 | PERF_TYPE_NUMBER | \
PERF_NUMBER_DECIMAL)
#define LODWORD(ll) ((DWORD)((LONGLONG)ll & 0x00000000FFFFFFFF))
#define HIDWORD(ll) ((DWORD)(((LONGLONG)ll >> 32) & 0x00000000FFFFFFFF))
#define SMALL_BUFFER_SIZE 4096
#define MEDIUM_BUFFER_SIZE 16834
#define LARGE_BUFFER_SIZE 65536
// set this to 1 to report code errors (i.e. debugging information)
// to the event log.
#define PDHI_REPORT_CODE_ERRORS 0
// set this to 1 to report user errors (i.e. things the normal user
// would care about) to the event log.
#define PDHI_REPORT_USER_ERRORS 1
// USER category errors are typically configuration, schema or access
// access errors, errors the user can usually do something about
#define PDH_EVENT_CATEGORY_USER 100
// COUNTER category errors are errors returned do to valid data returning
// invalid results. These are a special subset of USER Category errors.
#define PDH_EVENT_CATEGORY_COUNTER 110
// DEBUG category errors are of interest only to PDH developers as they
// indicate problems that can normally only be fixed by modifying the
// program code.
#define PDH_EVENT_CATEGORY_DEBUG 200
#define REPORT_EVENT(t,c,id) ReportEvent (hEventLog, t, c, id, NULL, 0, 0, NULL, NULL)
//
// Log file entries
//
extern LPCSTR szTsvLogFileHeader;
extern LPCSTR szCsvLogFileHeader;
extern LPCSTR szBinLogFileHeader;
extern LPCSTR szTsvType;
extern LPCSTR szCsvType;
extern LPCSTR szBinaryType;
extern const DWORD dwFileHeaderLength;
extern const DWORD dwTypeLoc;
extern const DWORD dwVersionLoc;
extern const DWORD dwFieldLength;
PDH_FUNCTION
PdhiGetLogCounterInfo (
IN HLOG hLog,
IN PPDHI_COUNTER pCounter
);
PDH_FUNCTION
PdhiEnumLoggedMachines (
IN LPCWSTR szDataSource,
IN LPVOID mszMachineList,
IN LPDWORD pcchBufferSize,
IN BOOL bUnicode
);
PDH_FUNCTION
PdhiEnumLoggedObjects (
IN LPCWSTR szDataSource,
IN LPCWSTR szMachineName,
IN LPVOID mszObjectList,
IN LPDWORD pcchBufferSize,
IN DWORD dwDetailLevel,
IN BOOL bRefresh,
IN BOOL bUnicode
);
PDH_FUNCTION
PdhiEnumLoggedObjectItems (
IN LPCWSTR szDataSource,
IN LPCWSTR szMachineName,
IN LPCWSTR szObjectName,
IN LPVOID mszCounterList,
IN LPDWORD pdwCounterListLength,
IN LPVOID mszInstanceList,
IN LPDWORD pdwInstanceListLength,
IN DWORD dwDetailLevel,
IN DWORD dwFlags,
IN BOOL bUnicode
);
BOOL
PdhiDataSourceHasDetailLevels (
IN LPWSTR szDataSource
);
PDH_FUNCTION
PdhiGetMatchingLogRecord (
IN HLOG hLog,
IN LONGLONG *pStartTime,
IN LPDWORD pdwIndex
);
PDH_FUNCTION
PdhiGetCounterValueFromLogFile (
IN HLOG hLog,
IN DWORD dwIndex,
IN PERFLIB_COUNTER *pPath,
IN PPDH_RAW_COUNTER pValue
);
// query.c
BOOL
PdhiQueryCleanup (
);
// cutils.c
BOOL
AssignCalcFunction (
IN DWORD dwCounterType,
IN LPCOUNTERCALC *pCalcFunc,
IN LPCOUNTERSTAT *pStatFunc
);
PDH_STATUS
PdhiComputeFormattedValue (
IN LPCOUNTERCALC pCalcFunc,
IN DWORD dwCounterType,
IN LONG lScale,
IN DWORD dwFormat,
IN PPDH_RAW_COUNTER pRawValue1,
IN PPDH_RAW_COUNTER pRawValue2,
IN PLONGLONG pTimeBase,
IN DWORD dwReserved,
IN OUT PPDH_FMT_COUNTERVALUE fmtValue
);
// qutils.c
DWORD
PdhiAsyncTimerThreadProc (
LPVOID pArg
);
BOOL
IsValidQuery (
IN HQUERY hQuery
);
BOOL
IsValidCounter (
IN HCOUNTER hCounter
);
BOOL
InitCounter (
IN OUT PPDHI_COUNTER pCounter
);
BOOL
ParseFullPathNameW (
IN LPCWSTR szFullCounterPath,
IN OUT PDWORD pdwBufferLength,
IN OUT PPDHI_COUNTER_PATH pCounter
);
BOOL
ParseInstanceName (
IN LPCWSTR szInstanceString,
IN OUT LPWSTR szInstanceName,
IN OUT LPWSTR szParentName,
IN OUT LPDWORD lpIndex
);
BOOL
FreeCounter (
IN PPDHI_COUNTER pThisCounter
);
BOOL
InitPerflibCounterInfo (
IN OUT PPDHI_COUNTER pCounter
);
BOOL
AddMachineToQueryLists (
IN PPERF_MACHINE pMachine,
IN PPDHI_COUNTER pNewCounter
);
BOOL
UpdateCounterValue (
IN PPDHI_COUNTER pCounter
);
BOOL
UpdateMultiInstanceCounterValue (
IN PPDHI_COUNTER pCounter
);
#define GPCDP_GET_BASE_DATA 0x00000001
PVOID
GetPerfCounterDataPtr (
IN PPERF_DATA_BLOCK pPerfData,
IN PPDHI_COUNTER_PATH pPath,
IN PPERFLIB_COUNTER pplCtr ,
IN DWORD dwFlags,
IN PDWORD pStatus
);
LONG
GetQueryPerfData (
IN PPDHI_QUERY pQuery
);
BOOL
GetInstanceByNameMatch (
IN PPERF_MACHINE pMachine,
IN OUT PPDHI_COUNTER pCounter
);
PDH_FUNCTION
PdhiResetLogBuffers (
IN HLOG hLog
);
DWORD
AddUniqueStringToMultiSz (
IN LPVOID mszDest,
IN LPSTR szSource,
IN BOOL bUnicodeDest
);
DWORD
AddUniqueWideStringToMultiSz (
IN LPVOID mszDest,
IN LPWSTR szSource,
IN BOOL bUnicodeDest
);
BOOL
PdhiBrowseDataSource (
IN HWND hWndParent,
IN LPVOID szFileName,
IN LPDWORD pcchFileNameSize,
IN BOOL bUnicodeString
);
LPWSTR
PdhiGetExplainText (
IN LPCWSTR szMachineName,
IN LPCWSTR szObjectName,
IN LPCWSTR szCounterName
);
LONG
GetCurrentServiceState (
SC_HANDLE hService,
BOOL * bStopped,
BOOL * bPaused
);
#endif // _PDHI_DEFS_H_