Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1995-1996 Microsoft Corporation
Module Name:
PXDebug.c
Abstract:
This module contains all debug-related code.
Revision History:
Who When What -------- -------- ---------------------------------------------- rmachin 11-01-96 stolen from ArvindM's cmadebug file TonyBe 02-21-99 re-work/re-write
Notes:
--*/
#include <precomp.h>
#define MODULE_NUMBER MODULE_DEBUG
#define _FILENUMBER 'BDXP'
#if DBG
ULONG PXDebugLevel = PXD_ERROR; ULONG PXDebugMask = PXM_ALL;
LIST_ENTRY PxdMemoryList; ULONG PxdAllocCount = 0; // how many allocated so far (unfreed)
NDIS_SPIN_LOCK PxdMemoryLock; BOOLEAN PxdInitDone = FALSE;
PVOID PxAuditAllocMem( PVOID pPointer, ULONG Size, ULONG Tag, ULONG FileNumber, ULONG LineNumber ) { PVOID pBuffer = NULL; PPXD_ALLOCATION pAllocInfo; NDIS_STATUS Status;
if(!PxdInitDone) { NdisAllocateSpinLock(&(PxdMemoryLock)); InitializeListHead(&PxdMemoryList); PxdInitDone = TRUE; }
pAllocInfo = ExAllocatePoolWithTag(NonPagedPool, Size+sizeof(PXD_ALLOCATION), Tag);
if (pAllocInfo != NULL) {
pBuffer = (PVOID)&(pAllocInfo->UserData); NdisFillMemory(pBuffer, Size, 0xAF); pAllocInfo->Signature = PXD_MEMORY_SIGNATURE; pAllocInfo->FileNumber = FileNumber; pAllocInfo->LineNumber = LineNumber; pAllocInfo->Size = Size; pAllocInfo->Location = (ULONG_PTR)pPointer;
NdisAcquireSpinLock(&(PxdMemoryLock));
InsertTailList(&PxdMemoryList, &pAllocInfo->Linkage);
PxdAllocCount++;
NdisReleaseSpinLock(&(PxdMemoryLock)); }
return (pBuffer); }
VOID PxAuditFreeMem( PVOID Pointer ) { PPXD_ALLOCATION pAllocInfo;
pAllocInfo = CONTAINING_RECORD(Pointer, PXD_ALLOCATION, UserData);
if(pAllocInfo->Signature != PXD_MEMORY_SIGNATURE) { DbgPrint("PxAuditFreeMem: unknown buffer 0x%x!\n", Pointer); DbgBreakPoint(); return; }
NdisAcquireSpinLock(&(PxdMemoryLock));
pAllocInfo->Signature = (ULONG)'DEAD';
RemoveEntryList(&pAllocInfo->Linkage);
PxdAllocCount--;
NdisReleaseSpinLock(&(PxdMemoryLock));
ExFreePool(pAllocInfo); }
#endif // DBG
|