/*++ 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 #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