129 lines
2 KiB
C++
129 lines
2 KiB
C++
//***************************************************************************
|
|
//
|
|
// debug.CPP
|
|
//
|
|
// Module: CDM Provider
|
|
//
|
|
// Purpose: Debugging routines
|
|
//
|
|
// Copyright (c) 2000 Microsoft Corporation
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifdef HEAP_DEBUG
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#endif
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
void __cdecl DebugOut(char *Format, ...)
|
|
{
|
|
char Buffer[1024];
|
|
va_list pArg;
|
|
ULONG i;
|
|
|
|
va_start(pArg, Format);
|
|
i = _vsnprintf(Buffer, sizeof(Buffer), Format, pArg);
|
|
OutputDebugString(Buffer);
|
|
}
|
|
|
|
#ifdef HEAP_DEBUG
|
|
PVOID MyHeap;
|
|
|
|
PVOID WmipAlloc(
|
|
IN ULONG Size
|
|
)
|
|
/*+++
|
|
|
|
Routine Description:
|
|
|
|
Internal memory allocator
|
|
|
|
Arguments:
|
|
|
|
Size is the number of bytes to allocate
|
|
|
|
Return Value:
|
|
|
|
pointer to alloced memory or NULL
|
|
|
|
---*/
|
|
{
|
|
PVOID p;
|
|
|
|
if (MyHeap == NULL)
|
|
{
|
|
MyHeap = RtlCreateHeap(HEAP_GROWABLE |
|
|
HEAP_GENERATE_EXCEPTIONS |
|
|
HEAP_TAIL_CHECKING_ENABLED |
|
|
HEAP_FREE_CHECKING_ENABLED,
|
|
NULL,
|
|
0,
|
|
0,
|
|
NULL,
|
|
NULL);
|
|
if (MyHeap == NULL)
|
|
{
|
|
WmipDebugPrint(("CDMPROV: Could not create debug heap\n"));
|
|
return(NULL);
|
|
}
|
|
}
|
|
|
|
WmipAssert(RtlValidateHeap(MyHeap,
|
|
0,
|
|
NULL));
|
|
|
|
p = RtlAllocateHeap(MyHeap,
|
|
0,
|
|
Size);
|
|
|
|
return(p);
|
|
}
|
|
|
|
void WmipFree(
|
|
IN PVOID Ptr
|
|
)
|
|
/*+++
|
|
|
|
Routine Description:
|
|
|
|
Internal memory deallocator
|
|
|
|
Arguments:
|
|
|
|
Pointer to freed memory
|
|
|
|
Return Value:
|
|
|
|
void
|
|
|
|
---*/
|
|
{
|
|
WmipAssert(Ptr != NULL);
|
|
WmipAssert(MyHeap != NULL);
|
|
|
|
WmipAssert(RtlValidateHeap(MyHeap,
|
|
0,
|
|
NULL));
|
|
RtlFreeHeap(MyHeap,
|
|
0,
|
|
Ptr);
|
|
}
|
|
|
|
void * __cdecl ::operator new(size_t Size)
|
|
{
|
|
return(WmipAlloc(Size));
|
|
}
|
|
|
|
void __cdecl ::operator delete(void *Ptr)
|
|
{
|
|
WmipFree(Ptr);
|
|
}
|
|
|
|
#endif
|