windows-nt/Source/XPSP1/NT/base/ntsetup/hwdb/utils/inc/basemem.h
2020-09-26 16:20:57 +08:00

100 lines
2.3 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
basemem.h
Abstract:
Implements macros and declares functions for basic allocation functions.
Consolidated into this file from debug.h and allutils.h
Author:
Marc R. Whitten (marcw) 09-Sep-1999
Revision History:
--*/
#pragma once
#ifdef _cplusplus
extern "C" {
#endif
#define INVALID_PTR ((PVOID)-1)
//
// Fail-proof memory allocators
//
PVOID SafeHeapAlloc (HANDLE g_hHeap, DWORD Flags, SIZE_T Size);
PVOID SafeHeapReAlloc (HANDLE g_hHeap, DWORD Flags, PVOID OldBlock, SIZE_T Size);
//
// Reusable memory alloc, kind of like a GROWBUFFER but more simple
//
PVOID ReuseAlloc (HANDLE Heap, PVOID OldPtr, DWORD SizeNeeded);
VOID ReuseFree (HANDLE Heap,PVOID Ptr);
#ifdef DEBUG
#define MemAlloc(heap,flags,size) DebugHeapAlloc(__FILE__,__LINE__,heap,flags,size)
#define MemReAlloc(heap,flags,ptr,size) DebugHeapReAlloc(__FILE__,__LINE__,heap,flags,ptr,size)
#define MemFree(heap,flags,ptr) DebugHeapFree(__FILE__,__LINE__,heap,flags,ptr)
#define MemCheck(x) DebugHeapCheck(__FILE__,__LINE__,heap)
#define Free(ptr) DebugHeapFree(__FILE__,__LINE__,g_hHeap,0,ptr)
#define MemAllocUninit(size) DebugHeapAlloc(__FILE__,__LINE__,g_hHeap,0,size)
#define MemAllocZeroed(size) DebugHeapAlloc(__FILE__,__LINE__,g_hHeap,HEAP_ZERO_MEMORY,size)
LPVOID DebugHeapAlloc (LPCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, SIZE_T dwSize);
LPVOID DebugHeapReAlloc (LPCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, LPCVOID pMem, SIZE_T dwSize);
BOOL DebugHeapFree (LPCSTR File, DWORD Line, HANDLE hHeap, DWORD dwFlags, LPCVOID pMem);
void DebugHeapCheck (LPCSTR File, DWORD Line, HANDLE hHeap);
VOID DumpHeapStats (VOID);
SIZE_T
DebugHeapValidatePtr (
HANDLE hHeap,
PCVOID CallerPtr,
PCSTR File,
DWORD Line
);
#define MemCheckPtr(heap,ptr) (DebugHeapValidatePtr(heap,ptr,__FILE__,__LINE__) != INVALID_PTR)
#else
#define MemAlloc SafeHeapAlloc
#define MemReAlloc SafeHeapReAlloc
#define MemFree(x,y,z) HeapFree(x,y,(LPVOID) z)
#define MemCheck(x)
#define Free(ptr) HeapFree(g_hHeap,0,ptr)
#define MemAllocUninit(size) SafeHeapAlloc(g_hHeap,0,size)
#define MemAllocZeroed(size) SafeHeapAlloc(g_hHeap,HEAP_ZERO_MEMORY,size)
#define DebugHeapCheck(x,y,z)
#define DumpHeapStats()
#define MemCheckPtr(heap,ptr) (1)
#endif
#ifdef _cplusplus
}
#endif