170 lines
3 KiB
C++
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
|
||
|
|
||
|
|
||
|
|