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@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?r... ============================================================================== --- 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); }
/*