windows-nt/Source/XPSP1/NT/printscan/print/spooler/dbglib/dbgnewp.hxx
2020-09-26 16:20:57 +08:00

170 lines
3 KiB
C++

/*++
Copyright (c) 1998-1999 Microsoft Corporation
All rights reserved.
Module Name:
dbgnewp.hxx
Abstract:
Debug new private header file
Author:
Steve Kiraly (SteveKi) 23-June-1998
Revision History:
--*/
#ifndef _DBGNEWP_HXX_
#define _DBGNEWP_HXX_
DEBUG_NS_BEGIN
class TDebugNewTag;
class TDebugNewAllocator
{
public:
TDebugNewAllocator::
TDebugNewAllocator(
VOID
);
TDebugNewAllocator::
~TDebugNewAllocator(
VOID
);
BOOL
TDebugNewAllocator::
bValid(
VOID
) const;
VOID
TDebugNewAllocator::
Initialize(
IN UINT uSizeHint
);
VOID
TDebugNewAllocator::
Destroy(
VOID
);
PVOID
TDebugNewAllocator::
Allocate(
IN SIZE_T Size,
IN PVOID pVoid,
IN LPCTSTR pszFile,
IN UINT uLine
);
VOID
TDebugNewAllocator::
Release(
IN PVOID pVoid
);
VOID
TDebugNewAllocator::
Report(
IN UINT uDevice,
IN LPCTSTR pszConfiguration
) const;
private:
enum
{
kDataHeapSize = 4096,
kTagHeapSize = 4096,
kHeaderPattern = 0xAA,
kTailPattern = 0xCC,
kDataAllocPattern = 0xBB,
kDataFreePattern = 0xFF,
};
enum ValidationErrorCode
{
kValidationErrorSuccess,
kValidationErrorInvalidHeader,
kValidationErrorInvalidTail,
kValidationErrorInvalidTailSignature,
kValidationErrorInvalidTailPointer,
kValidationErrorInvalidHeaderPtr,
kValidationErrorInvalidHeaderSignature,
kValidationErrorInvalidTagEntry,
kValidationHeapPointer,
kValidationErrorNullPointer,
kValidationErrorUnknown,
};
//
// Structure placed before each allocation, used for
// detecting leaks.
//
struct Header
{
PVOID pTag; // Pointer into tag data base
PVOID pSignature; // Signature used for header overwrite detection.
};
//
// Structure placed after each allocation, used for
// allocation block overwrite.
//
struct Tail
{
PVOID pSignature; // Signature used for tail overwrite detection.
};
//
// Copying and assignment are not defined.
//
TDebugNewAllocator::
TDebugNewAllocator(
const TDebugNewAllocator &rhs
);
const TDebugNewAllocator &
TDebugNewAllocator::
operator=(
const TDebugNewAllocator &rhs
);
VOID
TDebugNewAllocator::
FillHeaderDataTailPattern(
IN Header *pHeader,
IN SIZE_T Size
);
ValidationErrorCode
TDebugNewAllocator::
ValidateHeaderDataTailPattern(
IN PVOID pVoid,
IN Header *pHeader
);
BOOL m_bValid;
HANDLE m_hDataHeap;
TDebugNewTag *m_pTag;
};
DEBUG_NS_END
#endif // DBGNEWP_HXX