mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
5.2 KiB
291 lines
5.2 KiB
/*++
|
|
|
|
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_
|