/*++ Copyright (c) 1995-1996 Microsoft Corporation Module Name : iisprobe.hxx Abstract: Defines worker functions for IIS Probe Author: Murali R. Krishnan ( MuraliK ) 16-July-1996 Environment: Win32 User Mode Project: IIS Probe Application DLL Revision History: --*/ # ifndef _IISPROBE_HXX_ # define _IISPROBE_HXX_ /************************************************************ * Include Headers ************************************************************/ extern "C" { #include #include #include #include #include } # include # include // // System include files. // #define DEFAULT_TRACE_FLAGS (DEBUG_ERROR) # include "dbgutil.h" #include #include #include extern "C" { #include // // Project include files. // #include #include #include #include #include } // extern "C" #include #include #include #include // // Local include files. // #include "w3cons.hxx" #include #include "w3type.hxx" #include "stats.hxx" #include "w3data.hxx" #include "w3msg.h" #include "w3jobobj.hxx" #include "w3inst.hxx" #include "parmlist.hxx" #include "filter.hxx" #if defined(CAL_ENABLED) #include "cal.hxx" #endif #include "httpreq.hxx" #include "conn.hxx" #include "w3proc.hxx" #include "inline.hxx" #include // needed for tool help declarations // // Type definitions for pointers to call tool help functions. // typedef BOOL (WINAPI *MODULEWALK) (HANDLE hSnapshot, LPMODULEENTRY32 lpme); typedef BOOL (WINAPI *THREADWALK) (HANDLE hSnapshot, LPTHREADENTRY32 lpte); typedef BOOL (WINAPI *PROCESSWALK) (HANDLE hSnapshot, LPPROCESSENTRY32 lppe); typedef HANDLE (WINAPI *CREATESNAPSHOT)(DWORD dwFlags, DWORD th32ProcessID); typedef BOOL (WINAPI *HEAPLISTWALK) (HANDLE hSnapshot, LPHEAPLIST32 lphl ); typedef BOOL (WINAPI *HEAPBLOCKWALK) (LPHEAPENTRY32 lphe, DWORD th32ProcessID, ULONG_PTR th32HeapID); /************************************************************ * Type Definitions ************************************************************/ #define MAX_HEAP_BLOCK_SIZE 65536 // ------------------------------------------------------ // class HEAP_BLOCK_STATS // o Maintains statistics for each individual heap block // ------------------------------------------------------ class HEAP_BLOCK_STATS { public: // ------------------------------------------------------ // Data Members // o We will count individual blocks (busy & free) // based on size till MAX_HEAP_BLOCK_SIZE // All blocks >= MAX_HEAP_BLOCK_SIZE will be treated // as Jumbo blocks. // We count the (size, freq) separately for Jumbos // ------------------------------------------------------ ULONG FreeJumbo; ULONG BusyJumbo; ULONG FreeJumboBytes; ULONG BusyJumboBytes; ULONG FreeCounters[MAX_HEAP_BLOCK_SIZE]; ULONG BusyCounters[MAX_HEAP_BLOCK_SIZE]; public: // ------------------------------------------------------ // Functions // ------------------------------------------------------ HEAP_BLOCK_STATS(VOID) { Reset(); } ~HEAP_BLOCK_STATS(VOID) { /* Do Nothing */ } VOID Reset(VOID) { ZeroMemory( this, sizeof(*this)); } BOOL LoadHeapStats( PHANDLE phHeap); BOOL LoadHeapStats( LPHEAPLIST32 phl32, HEAPBLOCKWALK pHeap32First, HEAPBLOCKWALK pHeap32Next) ; // Win95 heap stuff const HEAP_BLOCK_STATS & operator += (const HEAP_BLOCK_STATS & heapBlockStats) { AddStatistics( heapBlockStats); return (*this); } private: VOID AddStatistics( const HEAP_BLOCK_STATS & heapBlockStats); VOID UpdateBlockStats(IN LPPROCESS_HEAP_ENTRY lpLocalHeapEntry); VOID UpdateBlockStats(IN LPHEAPENTRY32 lpHeapEntry); }; typedef HEAP_BLOCK_STATS *PHEAP_BLOCK_STATS; // ------------------------------------------------------ // class HEAP_BLOCK_STATS // o Maintains statistics for one heap in the process // ------------------------------------------------------ class HEAP_STATS { public: ULONG m_BusyBytes; ULONG m_BusyBlocks; ULONG m_FreeBytes; ULONG m_FreeBlocks; public: HEAP_STATS( VOID) : m_BusyBytes ( 0) , m_BusyBlocks ( 0) , m_FreeBytes ( 0) , m_FreeBlocks ( 0) {} ~HEAP_STATS(VOID) { /* Do Nothing */ } VOID Reset( VOID) { m_BusyBytes = 0; m_BusyBlocks = 0; m_FreeBytes = 0; m_FreeBlocks = 0; } const HEAP_STATS & operator += (const HEAP_STATS & heapStats) { AddStatistics( heapStats); return (*this); } VOID ExtractStatsFromBlockStats( const HEAP_BLOCK_STATS * pheapBlockStats); private: VOID AddStatistics( const HEAP_STATS & heapStats); }; typedef HEAP_STATS * PHEAP_STATS; /************************************************************ * Prototypes ************************************************************/ BOOL SendAllInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendSizeInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendCacheInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendCacheCounterInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendUsage( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendAllocCacheInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendWamInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendAspInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendHeapInfo( IN EXTENSION_CONTROL_BLOCK * pecb); BOOL SendMemoryInfo( IN EXTENSION_CONTROL_BLOCK * pecb); # pragma hdrstop # endif // _IISPROBE_HXX_ /************************ End of File ***********************/