292 lines
5.2 KiB
C
292 lines
5.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
heapdbg.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Domain Name System (DNS) Library
|
||
|
|
||
|
Heap debugging definitions and declarations.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Jim Gilroy (jamesg) January 31, 1995
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#ifndef _HEAPDBG_INCLUDED_
|
||
|
#define _HEAPDBG_INCLUDED_
|
||
|
|
||
|
|
||
|
//
|
||
|
// Heap blob
|
||
|
//
|
||
|
|
||
|
typedef struct _HeapBlob
|
||
|
{
|
||
|
HANDLE hHeap;
|
||
|
|
||
|
LIST_ENTRY ListHead;
|
||
|
|
||
|
// flags
|
||
|
BOOL fCreated;
|
||
|
BOOL fHeaders;
|
||
|
DWORD Tag;
|
||
|
BOOL fDnsLib;
|
||
|
BOOL fCheckAll;
|
||
|
DWORD FailureException;
|
||
|
DWORD AllocFlags;
|
||
|
DWORD DefaultFlags;
|
||
|
|
||
|
// stats
|
||
|
DWORD AllocMem;
|
||
|
DWORD FreeMem;
|
||
|
DWORD CurrentMem;
|
||
|
DWORD AllocCount;
|
||
|
DWORD FreeCount;
|
||
|
DWORD CurrentCount;
|
||
|
|
||
|
PSTR pszDefaultFile;
|
||
|
DWORD DefaultLine;
|
||
|
|
||
|
CRITICAL_SECTION ListCs;
|
||
|
}
|
||
|
HEAP_BLOB, *PHEAP_BLOB;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Heap Header
|
||
|
//
|
||
|
|
||
|
#define HEAP_HEADER_FILE_SIZE (16)
|
||
|
|
||
|
typedef struct _HEAP_HEADER
|
||
|
{
|
||
|
//
|
||
|
// Note, if move or add fields, MUST update list entry offset below
|
||
|
//
|
||
|
|
||
|
ULONG HeapCodeBegin;
|
||
|
ULONG AllocCount;
|
||
|
ULONG AllocSize;
|
||
|
ULONG RequestSize;
|
||
|
|
||
|
//
|
||
|
// Put LIST_ENTRY in middle of header
|
||
|
// - keep begin code at front
|
||
|
// - less likely to be corrupted
|
||
|
//
|
||
|
|
||
|
LIST_ENTRY ListEntry;
|
||
|
|
||
|
PHEAP_BLOB pHeap;
|
||
|
PSTR FileName;
|
||
|
DWORD LineNo;
|
||
|
|
||
|
DWORD AllocTime;
|
||
|
ULONG CurrentMem;
|
||
|
ULONG CurrentCount;
|
||
|
ULONG HeapCodeEnd;
|
||
|
}
|
||
|
HEAP_HEADER, * PHEAP_HEADER;
|
||
|
|
||
|
//
|
||
|
// Heap Trailer
|
||
|
//
|
||
|
|
||
|
typedef struct _HEAP_TRAILER
|
||
|
{
|
||
|
ULONG HeapCodeBegin;
|
||
|
ULONG AllocCount;
|
||
|
ULONG AllocSize;
|
||
|
ULONG HeapCodeEnd;
|
||
|
}
|
||
|
HEAP_TRAILER, * PHEAP_TRAILER;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Header from list entry
|
||
|
//
|
||
|
|
||
|
#define HEAP_HEADER_LIST_ENTRY_OFFSET (16)
|
||
|
|
||
|
#define HEAP_HEADER_FROM_LIST_ENTRY( pList ) \
|
||
|
( (PHEAP_HEADER)( (PCHAR)pList - HEAP_HEADER_LIST_ENTRY_OFFSET ))
|
||
|
|
||
|
|
||
|
//
|
||
|
// Validation
|
||
|
//
|
||
|
|
||
|
PHEAP_HEADER
|
||
|
Dns_DbgHeapValidateMemory(
|
||
|
IN PVOID pMem,
|
||
|
IN BOOL fAtHeader
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapValidateAllocList(
|
||
|
IN PHEAP_BLOB pHeap
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Debug print
|
||
|
//
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapGlobalInfoPrint(
|
||
|
IN PHEAP_BLOB pHeap
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapHeaderPrint(
|
||
|
IN PHEAP_HEADER h,
|
||
|
IN PHEAP_TRAILER t
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapDumpAllocList(
|
||
|
IN PHEAP_BLOB pHeap
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Init\cleanup
|
||
|
//
|
||
|
|
||
|
VOID
|
||
|
Dns_HeapInitialize(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN HANDLE hHeap,
|
||
|
IN DWORD dwCreateFlags,
|
||
|
IN BOOL fUseHeaders,
|
||
|
IN BOOL fResetDnslib,
|
||
|
IN BOOL fFullHeapChecks,
|
||
|
IN DWORD dwException,
|
||
|
IN DWORD dwDefaultFlags,
|
||
|
IN PSTR pszDefaultFileName,
|
||
|
IN DWORD dwDefaultFileLine
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_HeapCleanup(
|
||
|
IN OUT PHEAP_BLOB pHeap
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Full debug heap routines
|
||
|
//
|
||
|
|
||
|
PVOID
|
||
|
Dns_DbgHeapAllocEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN INT iSize,
|
||
|
IN LPSTR pszFile,
|
||
|
IN DWORD dwLine
|
||
|
);
|
||
|
|
||
|
PVOID
|
||
|
Dns_DbgHeapReallocEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN OUT PVOID pMem,
|
||
|
IN INT iSize,
|
||
|
IN LPSTR pszFile,
|
||
|
IN DWORD dwLine
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapFreeEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN OUT PVOID pMem
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Dnslib compatible versions of full debug versions
|
||
|
//
|
||
|
|
||
|
PVOID
|
||
|
Dns_DbgHeapAlloc(
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
PVOID
|
||
|
Dns_DbgHeapRealloc(
|
||
|
IN OUT PVOID pMem,
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_DbgHeapFree(
|
||
|
IN OUT PVOID pMem
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Non-debug-header versions
|
||
|
//
|
||
|
// These allow you to use a private heap with some of the features
|
||
|
// of the debug heap
|
||
|
// - same initialization
|
||
|
// - specifying individual heap
|
||
|
// - redirection of dnslib (without building your own routines)
|
||
|
// - alloc and free counts
|
||
|
// but without the overhead of the headers.
|
||
|
//
|
||
|
|
||
|
PVOID
|
||
|
Dns_HeapAllocEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
PVOID
|
||
|
Dns_HeapReallocEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN OUT PVOID pMem,
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_HeapFreeEx(
|
||
|
IN OUT PHEAP_BLOB pHeap,
|
||
|
IN DWORD dwFlags,
|
||
|
IN OUT PVOID pMem
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Dnslib compatible versions of non-debug-header versions
|
||
|
//
|
||
|
|
||
|
PVOID
|
||
|
Dns_HeapAlloc(
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
PVOID
|
||
|
Dns_HeapRealloc(
|
||
|
IN OUT PVOID pMem,
|
||
|
IN INT iSize
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Dns_HeapFree(
|
||
|
IN OUT PVOID pMem
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif // _HEAPDBG_INCLUDED_
|