Simpler:
+ if (LdrEntry)
+ {
+ ULONG i;
+ Tag = '____'; // IMO better than ' '
+ for (i = 0; i < min(4, LdrEntry->BaseDllName.Length / sizeof(WCHAR)); i++)
+ ((PCHAR)&Tag)[i] = (LdrEntry->BaseDllName.Buffer[i] & 0xff);
+ }
Maybe we can also add support for tracking backtraces of pool allocations.
Am 22.10.2014 15:26, schrieb tfaber(a)svn.reactos.org:
Author: tfaber
Date: Wed Oct 22 13:26:50 2014
New Revision: 64889
URL:
http://svn.reactos.org/svn/reactos?rev=64889&view=rev
Log:
[NTOS:MM]
- Add a way to generate a pool tag from the calling driver name if none is specified.
Disabled by default.
Modified:
trunk/reactos/ntoskrnl/mm/ARM3/expool.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/expool.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/expool.c?…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/expool.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/expool.c [iso-8859-1] Wed Oct 22 13:26:50 2014
@@ -2046,10 +2046,25 @@
ExAllocatePool(POOL_TYPE PoolType,
SIZE_T NumberOfBytes)
{
- //
- // Use a default tag of "None"
- //
- return ExAllocatePoolWithTag(PoolType, NumberOfBytes, TAG_NONE);
+ ULONG Tag = TAG_NONE;
+#if 0 && DBG
+ PLDR_DATA_TABLE_ENTRY LdrEntry;
+
+ /* Use the first four letters of the driver name, or "None" if unavailable
*/
+ LdrEntry = KeGetCurrentIrql() <= APC_LEVEL
+ ? MiLookupDataTableEntry(_ReturnAddress())
+ : NULL;
+ if (LdrEntry)
+ {
+ ULONG i;
+ Tag = 0;
+ for (i = 0; i < min(4, LdrEntry->BaseDllName.Length / sizeof(WCHAR));
i++)
+ Tag = Tag >> 8 | (LdrEntry->BaseDllName.Buffer[i] & 0xff)
<< 24;
+ for (; i < 4; i++)
+ Tag = Tag >> 8 | ' ' << 24;
+ }
+#endif
+ return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
}
/*
@@ -2513,7 +2528,7 @@
//
// Allocate the pool
//
- return ExAllocatePoolWithQuotaTag(PoolType, NumberOfBytes, 'enoN');
+ return ExAllocatePoolWithQuotaTag(PoolType, NumberOfBytes, TAG_NONE);
}
/*