7 #define FOURCC(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
10 #define FBSD_MALLOC FOURCC('d','s','b','f')
11 #define EXALLOC_TAG FOURCC('E','x','A','l')
12 #define IRP_TAG FOURCC('P','I','R','P')
14 #define AllocatePacketWithBuffer(x,y,z) AllocatePacketWithBufferX(x,y,z,__FILE__,__LINE__)
15 #define FreeNdisPacket(x) FreeNdisPacketX(x,__FILE__,__LINE__)
18 #define MTMARK() TrackDumpFL(__FILE__, __LINE__)
19 #define exAllocatePool(x,y) ExAllocatePoolX(x,y,__FILE__,__LINE__)
20 #define exAllocatePoolWithTag(x,y,z) ExAllocatePoolX(x,y,__FILE__,__LINE__)
21 #define exFreePool(x) ExFreePoolX(x,__FILE__,__LINE__)
23 extern LIST_ENTRY AllocatedObjectsHead
;
24 extern KSPIN_LOCK AllocatedObjectsLock
;
26 typedef struct _ALLOCATION_TRACKER
{
32 } ALLOCATION_TRACKER
, *PALLOCATION_TRACKER
;
35 VOID
TrackWithTag( DWORD Tag
, PVOID Thing
, PCHAR File
, DWORD Line
);
36 #define Track(Tag,Thing) TrackWithTag(Tag,Thing,__FILE__,__LINE__)
37 VOID
UntrackFL( PCHAR File
, DWORD Line
, PVOID Thing
);
38 #define Untrack(Thing) UntrackFL(__FILE__,__LINE__,Thing)
39 VOID
TrackDumpFL( PCHAR File
, DWORD Line
);
40 #define TrackDump() TrackDumpFL(__FILE__,__LINE__)
41 VOID
TrackTag( DWORD Tag
);
43 static __inline PVOID
ExAllocatePoolX( POOL_TYPE type
, SIZE_T size
, PCHAR File
, ULONG Line
) {
44 PVOID Out
= PoolAllocateBuffer( size
);
45 if( Out
) TrackWithTag( EXALLOC_TAG
, Out
, File
, Line
);
48 static __inline VOID
ExFreePoolX( PVOID Data
, PCHAR File
, ULONG Line
) {
49 UntrackFL(File
, Line
, Data
);
53 #define MEMTRACK_MAX_TAGS_TO_TRACK 64
57 #define TrackingInit()
61 #define exAllocatePoolWithTag(x,y,z) ExAllocatePoolWithTag(x,y,z)
62 #define exAllocatePool(x,y) PoolAllocateBuffer(y)
63 #define exFreePool(x) PoolFreeBuffer(x)
64 #define TrackWithTag(w,x,y,z)
65 #define UntrackFL(x,y,z)