#ifdef MEMTRACK
-LIST_ENTRY AllocatedObjectsList;
-KSPIN_LOCK AllocatedObjectsLock;
+#define TRACK_TAG TAG('T','r','C','K')
+
+static LIST_ENTRY AllocatedObjectsList;
+static KSPIN_LOCK AllocatedObjectsLock;
+static NPAGED_LOOKASIDE_LIST AllocatedObjectsLookasideList;
DWORD TagsToShow[MEMTRACK_MAX_TAGS_TO_TRACK] = { 0 };
VOID TrackTag( DWORD Tag ) {
VOID TrackingInit() {
TcpipInitializeSpinLock( &AllocatedObjectsLock );
InitializeListHead( &AllocatedObjectsList );
+ ExInitializeNPagedLookasideList(&AllocatedObjectsLookasideList,
+ NULL,
+ NULL,
+ 0,
+ sizeof(ALLOCATION_TRACKER),
+ TRACK_TAG,
+ 0 );
}
VOID ShowTrackedThing( PCHAR What, PALLOCATION_TRACKER Thing,
VOID TrackWithTag( DWORD Tag, PVOID Thing, PCHAR FileName, DWORD LineNo ) {
PALLOCATION_TRACKER TrackedThing =
- PoolAllocateBuffer( sizeof(*TrackedThing) );
+ ExAllocateFromNPagedLookasideList( &AllocatedObjectsLookasideList );
KIRQL OldIrql;
PLIST_ENTRY Entry;
TrackedThing->LineNo = LineNo;
- InsertTailList( &AllocatedObjectsList, &TrackedThing->Entry );
+ InsertHeadList( &AllocatedObjectsList, &TrackedThing->Entry );
ShowTrackedThing( "Alloc", TrackedThing, FileName, LineNo );
}
ShowTrackedThing( "Free ", ThingInList, File, Line );
- PoolFreeBuffer( ThingInList );
+ ExFreeToNPagedLookasideList( &AllocatedObjectsLookasideList,
+ ThingInList );
+
TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql );
/* TrackDumpFL( File, Line ); */
return;