/*++ Copyright (c) 1995 Microsoft Corporation Module Name: debugmem.h Abstract: Header for debugmem.cxx Author: Richard L Firth (rfirth) 02-Feb-1995 Revision History: 02-Feb-1995 Created --*/ #ifdef WINHTTP_FOR_MSXML #error include msxmlmem.h, not debugmem.h, for MSXML #endif #if defined(__cplusplus) extern "C" { #endif // // manifests // // // USE_PRIVATE_HEAP_IN_RETAIL - by default we use the process heap in the retail // build. Alternative is to use a private (wininet) heap (which we do in the // debug version if required) // #if !defined(USE_PRIVATE_HEAP_IN_RETAIL) #define USE_PRIVATE_HEAP_IN_RETAIL 0 #endif // // prototypes // VOID InternetDebugMemInitialize( VOID ); VOID InternetDebugMemTerminate( IN BOOL bReport ); HLOCAL InternetDebugAllocMem( IN UINT Flags, IN UINT Size, IN LPSTR File, IN DWORD Line ); HLOCAL InternetDebugFreeMem( IN HLOCAL hLocal, IN LPSTR File, IN DWORD Line ); HLOCAL InternetDebugReAllocMem( IN HLOCAL hLocal, IN UINT Size, IN UINT Flags, IN LPSTR File, IN DWORD Line ); SIZE_T InternetDebugSizeMem( IN HLOCAL hLocal, IN LPSTR File, IN DWORD Line ); BOOL InternetDebugCheckMemFreed( IN BOOL bReport ); BOOL InternetDebugMemReport( IN BOOL bTerminateSymbols, IN BOOL bCloseFile ); //disable compilation with if two or more of USE_DEBUG_MEMORY, USE_ROCKALL or USE_LOWFRAGHEAP //defined at same time #if (defined(USE_DEBUG_MEMORY) && (defined(USE_ROCKALL) || defined(USE_LOWFRAGHEAP))) || (defined(USE_ROCKALL) && defined(USE_LOWFRAGHEAP)) #error "Do not define USE_DEBUG_MEMORY, USE_ROCKALL or USE_LOWFRAGHEAP at same time" #endif // // macros // #if defined(USE_DEBUG_MEMORY) #define ALLOCATOR(Flags, Size) InternetDebugAllocMem(Flags, Size, __FILE__, __LINE__) #define DEALLOCATOR(hLocal) InternetDebugFreeMem(hLocal, __FILE__, __LINE__) #define REALLOCATOR(hLocal, Size, Flags) InternetDebugReAllocMem(hLocal, Size, Flags, __FILE__, __LINE__) #define MEMORYSIZER(hLocal) InternetDebugSizeMem(hLocal, __FILE__, __LINE__) #define INITIALIZE_MEMORY_MANAGER() InternetDebugMemInitialize() #define TERMINATE_MEMORY_MANAGER(bReport) InternetDebugMemTerminate(bReport) #define MEMORY_MANAGER_ON_THREAD_DETACH() /* NOTHING */ #define CHECK_MEMORY_FREED(bReport) InternetDebugCheckMemFreed(bReport) #define REPORT_DEBUG_MEMORY(bTermSym, bCloseFile) InternetDebugMemReport(bTermSym, bCloseFile) #elif defined(USE_ROCKALL) //defined(USE_DEBUG_MEMORY) extern void INITIALIZE_MEMORY_MANAGER(); extern void TERMINATE_MEMORY_MANAGER(BOOL bReport); extern void MEMORY_MANAGER_ON_THREAD_DETACH(); extern void* ALLOCATOR(int Flags, int Size); extern void* DEALLOCATOR(void *hLocal); extern void* REALLOCATOR(void *hLocal, int Size, int Flags); extern int MEMORYSIZER(void *hLocal); #define CHECK_MEMORY_FREED(bReport) /* NOTHING */ #define REPORT_DEBUG_MEMORY(bTermSym, bCloseFile) /* NOTHING */ #elif defined(USE_LOWFRAGHEAP) //defined(USE_ROCKALL) //defined(USE_DEBUG_MEMORY) extern HANDLE g_hLowFragHeap; #if !INET_DEBUG && !defined(LFH_DEBUG) #define LFH_ALLOC(Flags, Size) HeapAlloc(g_hLowFragHeap, Flags, Size) #define LFH_FREE(ptr) HeapFree(g_hLowFragHeap, 0, ptr) #define LFH_REALLOC(Flags, ptr, Size) HeapReAlloc(g_hLowFragHeap, Flags, ptr, Size) #define LFH_SIZE(ptr) HeapSize(g_hLowFragHeap, 0, ptr) #else //!INET_DEBUG && !defined(LFH_DEBUG) extern PVOID LFHDebugAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T stSize); extern BOOL LFHDebugFree(HANDLE hHeap, DWORD dwFlags, PVOID ptr); extern PVOID LFHDebugReAlloc(HANDLE hHeap, DWORD dwFlags, PVOID ptr, SIZE_T stSize); extern SIZE_T LFHDebugSize(HANDLE hHeap, DWORD dwFlags, PVOID ptr); #define LFH_ALLOC(Flags, Size) LFHDebugAlloc(g_hLowFragHeap, Flags, Size) #define LFH_FREE(ptr) LFHDebugFree(g_hLowFragHeap, 0, ptr) #define LFH_REALLOC(Flags, ptr, Size) LFHDebugReAlloc(g_hLowFragHeap, Flags, ptr, Size) #define LFH_SIZE(ptr) LFHDebugSize(g_hLowFragHeap, 0, ptr) #endif //!INET_DEBUG && !defined(LFH_DEBUG) extern BOOL INITIALIZE_MEMORY_MANAGER(); extern void TERMINATE_MEMORY_MANAGER(BOOL bReport); #define MEMORY_MANAGER_ON_THREAD_DETACH() /* NOTHING */ #define CHECK_MEMORY_FREED(bReport) /* NOTHING */ #define REPORT_DEBUG_MEMORY(bTermSym, bCloseFile) /* NOTHING */ #else //defined(USE_LOWFRAGHEAP) //defined(USE_ROCKALL) //defined(USE_DEBUG_MEMORY) #define ALLOCATOR(Flags, Size) LocalAlloc(Flags, Size) #define DEALLOCATOR(hLocal) LocalFree(hLocal) #define REALLOCATOR(hLocal, Size, Flags) LocalReAlloc(hLocal, Size, Flags) #define MEMORYSIZER(hLocal) LocalSize(hLocal) #define INITIALIZE_MEMORY_MANAGER() /* NOTHING */ #define TERMINATE_MEMORY_MANAGER(bReport) /* NOTHING */ #define MEMORY_MANAGER_ON_THREAD_DETACH() /* NOTHING */ #define CHECK_MEMORY_FREED(bReport) /* NOTHING */ #define REPORT_DEBUG_MEMORY(bTermSym, bCloseFile) /* NOTHING */ #endif //defined(USE_LOWFRAGHEAP) //defined(USE_ROCKALL) //defined(USE_DEBUG_MEMORY) #if defined(USE_ROCKALL) #define ALLOCATE_ZERO_MEMORY(Size) ALLOCATOR(LPTR, (UINT)(Size)) #define ALLOCATE_FIXED_MEMORY(Size) ALLOCATOR(LMEM_FIXED, (UINT)(Size)) #define ALLOCATE_MEMORY(Size) ALLOCATOR(LMEM_FIXED, (UINT)(Size)) #define FREE_ZERO_MEMORY(hLocal) FREE_MEMORY((void*)(hLocal)) #define FREE_FIXED_MEMORY(hLocal) FREE_MEMORY((void*)(hLocal)) #define FREE_MEMORY(hLocal) DEALLOCATOR((void*)(hLocal)) #define REALLOCATE_MEMORY(hLocal, Size) REALLOCATOR((void*)(hLocal), (UINT)(Size), LMEM_MOVEABLE) #define REALLOCATE_MEMORY_ZERO(hLocal, Size) REALLOCATOR((void*)(hLocal), (UINT)(Size), LMEM_MOVEABLE | LMEM_ZEROINIT) #define REALLOCATE_MEMORY_IN_PLACE(hLocal, Size, bZero) REALLOCATOR((void*)(hLocal), (UINT)(Size), (bZero) ? LMEM_ZEROINIT : 0) #define MEMORY_SIZE(hLocal) MEMORYSIZER((void*)(hLocal)) #elif defined(USE_LOWFRAGHEAP) //defined(USE_ROCKALL) #define ALLOCATE_ZERO_MEMORY(Size) LFH_ALLOC(HEAP_ZERO_MEMORY, (SIZE_T)(Size)) #define ALLOCATE_FIXED_MEMORY(Size) LFH_ALLOC(0, (SIZE_T)(Size)) #define ALLOCATE_MEMORY(Size) LFH_ALLOC(0, (SIZE_T)(Size)) #define FREE_ZERO_MEMORY(ptr) (LFH_FREE((PVOID)(ptr)), NULL) #define FREE_FIXED_MEMORY(ptr) (LFH_FREE((PVOID)(ptr)), NULL) #define FREE_MEMORY(ptr) (LFH_FREE((PVOID)(ptr)), NULL) #define REALLOCATE_MEMORY(ptr, Size) LFH_REALLOC(0, (PVOID)(ptr), (SIZE_T)(Size)) #define REALLOCATE_MEMORY_ZERO(ptr, Size) LFH_REALLOC(HEAP_ZERO_MEMORY, (PVOID)(ptr), (SIZE_T)(Size)) #define REALLOCATE_MEMORY_IN_PLACE(ptr, Size, bZero) LFH_REALLOC(HEAP_REALLOC_IN_PLACE_ONLY | ((bZero) ? HEAP_ZERO_MEMORY : 0), (PVOID)(ptr), (SIZE_T)(Size)) #define MEMORY_SIZE(ptr) LFH_SIZE(0, (PVOID)ptr) #else //defined (USE_LOWFRAGHEAP) //defined(USE_ROCKALL) #define ALLOCATE_ZERO_MEMORY(Size) ALLOCATOR(LPTR, (UINT)(Size)) #define ALLOCATE_FIXED_MEMORY(Size) ALLOCATOR(LMEM_FIXED, (UINT)(Size)) #define ALLOCATE_MEMORY(Size) ALLOCATOR(LMEM_FIXED, (UINT)(Size)) #define FREE_ZERO_MEMORY(hLocal) FREE_MEMORY((HLOCAL)(hLocal)) #define FREE_FIXED_MEMORY(hLocal) FREE_MEMORY((HLOCAL)(hLocal)) #define FREE_MEMORY(hLocal) DEALLOCATOR((HLOCAL)(hLocal)) #define REALLOCATE_MEMORY(hLocal, Size) REALLOCATOR((HLOCAL)(hLocal), (UINT)(Size), LMEM_MOVEABLE) #define REALLOCATE_MEMORY_ZERO(hLocal, Size) REALLOCATOR((HLOCAL)(hLocal), (UINT)(Size), LMEM_MOVEABLE | LMEM_ZEROINIT) #define REALLOCATE_MEMORY_IN_PLACE(hLocal, Size, bZero) REALLOCATOR((HLOCAL)(hLocal), (UINT)(Size), (bZero) ? LMEM_ZEROINIT : 0) #define MEMORY_SIZE(hLocal) MEMORYSIZER((HLOCAL)(hLocal)) #endif //defined (USE_LOWFRAGHEAP) //defined(USE_ROCKALL) #define New new #if defined(__cplusplus) } #endif // // Wininet no longer uses moveable memory // #define LOCK_MEMORY(p) (LPSTR)(p) #define UNLOCK_MEMORY(p)