Change ExFreePool to ExFreePoolWithTag
Don't call RtlFreeUnicodeString if the string wasn't created by
RtlAnsiStringToUnicodeString or RtlUpcaseUnicodeString
Implement ExRosQueryNonPagedPoolTag
Add BAD_POOL_CALLER code
Modified: trunk/reactos/ntoskrnl/cm/regobj.c
Modified: trunk/reactos/ntoskrnl/io/device.c
Modified: trunk/reactos/ntoskrnl/io/irp.c
Modified: trunk/reactos/ntoskrnl/io/mdl.c
Modified: trunk/reactos/ntoskrnl/mm/marea.c
Modified: trunk/reactos/ntoskrnl/mm/mdl.c
Modified: trunk/reactos/ntoskrnl/mm/npool.c
Modified: trunk/reactos/ntoskrnl/ntoskrnl.mc
Modified: trunk/reactos/ntoskrnl/ob/object.c
_____
Modified: trunk/reactos/ntoskrnl/cm/regobj.c
--- trunk/reactos/ntoskrnl/cm/regobj.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/cm/regobj.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -91,7 +91,7 @@
{
ExReleaseResourceLite(&CmiRegistryLock);
KeLeaveCriticalRegion();
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return Status;
}
if (FoundObject == NULL)
@@ -107,7 +107,7 @@
{
ExReleaseResourceLite(&CmiRegistryLock);
KeLeaveCriticalRegion();
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return(STATUS_UNSUCCESSFUL);
}
@@ -140,7 +140,7 @@
wcscat(TargetPath.Buffer, EndPtr);
}
- RtlFreeUnicodeString(FullPath);
+ ExFreePool(FullPath->Buffer);
RtlFreeUnicodeString(&LinkPath);
FullPath->Length = TargetPath.Length;
FullPath->MaximumLength = TargetPath.MaximumLength;
@@ -153,7 +153,7 @@
*NextObject = NULL;
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return(STATUS_REPARSE);
}
}
@@ -173,7 +173,7 @@
{
ExReleaseResourceLite(&CmiRegistryLock);
KeLeaveCriticalRegion();
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return(Status);
}
/* Add the keep-alive reference */
@@ -224,8 +224,8 @@
wcscat(TargetPath.Buffer, EndPtr);
}
- RtlFreeUnicodeString(FullPath);
- RtlFreeUnicodeString(&LinkPath);
+ ExFreePool(FullPath->Buffer);
+ ExFreePool(LinkPath.Buffer);
FullPath->Length = TargetPath.Length;
FullPath->MaximumLength = TargetPath.MaximumLength;
FullPath->Buffer = TargetPath.Buffer;
@@ -237,7 +237,7 @@
*NextObject = NULL;
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return(STATUS_REPARSE);
}
}
@@ -258,7 +258,7 @@
*NextObject = FoundObject;
- RtlFreeUnicodeString(&KeyName);
+ ExFreePool(KeyName.Buffer);
return(STATUS_SUCCESS);
}
_____
Modified: trunk/reactos/ntoskrnl/io/device.c
--- trunk/reactos/ntoskrnl/io/device.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/io/device.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -18,6 +18,7 @@
#define TAG_DEVICE_EXTENSION TAG('D', 'E', 'X', 'T')
#define TAG_SHUTDOWN_ENTRY TAG('S', 'H', 'U', 'T')
+#define TAG_IO_TIMER TAG('I', 'O', 'T', 'M')
static ULONG IopDeviceObjectNumber = 0;
@@ -589,7 +590,7 @@
if (DeviceObject->Timer)
{
IopRemoveTimerFromTimerList(DeviceObject->Timer);
- ExFreePool(DeviceObject->Timer);
+ ExFreePoolWithTag(DeviceObject->Timer, TAG_IO_TIMER);
}
/* Remove device from driver device list */
_____
Modified: trunk/reactos/ntoskrnl/io/irp.c
--- trunk/reactos/ntoskrnl/io/irp.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/io/irp.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -871,7 +871,7 @@
IoFreeIrp(PIRP Irp)
{
/* Free the pool memory associated with it */
- ExFreePool(Irp);
+ ExFreePoolWithTag(Irp, TAG_IRP);
}
/*
@@ -1253,7 +1253,7 @@
/* Also check if we should de-allocate it */
if (Irp->Flags & IRP_DEALLOCATE_BUFFER)
{
- ExFreePool(Irp->AssociatedIrp.SystemBuffer);
+ ExFreePoolWithTag(Irp->AssociatedIrp.SystemBuffer,
TAG_SYS_BUF);
}
}
_____
Modified: trunk/reactos/ntoskrnl/io/mdl.c
--- trunk/reactos/ntoskrnl/io/mdl.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/io/mdl.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -132,7 +132,7 @@
MmPrepareMdlForReuse(Mdl);
- ExFreePool(Mdl);
+ ExFreePoolWithTag(Mdl, TAG_MDL);
}
_____
Modified: trunk/reactos/ntoskrnl/mm/marea.c
--- trunk/reactos/ntoskrnl/mm/marea.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/mm/marea.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -812,7 +812,7 @@
}
}
- ExFreePool(MemoryArea);
+ ExFreePoolWithTag(MemoryArea, TAG_MAREA);
DPRINT("MmFreeMemoryAreaByNode() succeeded\n");
_____
Modified: trunk/reactos/ntoskrnl/mm/mdl.c
--- trunk/reactos/ntoskrnl/mm/mdl.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/mm/mdl.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -16,7 +16,7 @@
/* GLOBALS
*******************************************************************/
-#define TAG_MDL TAG('M', 'M', 'D', 'L')
+#define TAG_MDL TAG('M', 'D', 'L', ' ')
#define MI_MDL_MAPPING_REGION_SIZE (256*1024*1024)
_____
Modified: trunk/reactos/ntoskrnl/mm/npool.c
--- trunk/reactos/ntoskrnl/mm/npool.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/mm/npool.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -1458,6 +1458,28 @@
#endif /* not WHOLE_PAGE_ALLOCATIONS */
+ULONG STDCALL
+ExRosQueryNonPagedPoolTag ( PVOID Addr )
+{
+#ifdef WHOLE_PAGE_ALLOCATIONS /* WHOLE_PAGE_ALLOCATIONS */
+
+ UNIMPLEMENTED;
+ return 0;
+
+#else /* not WHOLE_PAGE_ALLOCATIONS */
+
+ BLOCK_HDR* blk=address_to_block(Addr);
+
+ if (blk->Magic != BLOCK_HDR_USED_MAGIC)
+ KEBUGCHECK(0);
+ if (blk->Magic == BLOCK_HDR_FREE_MAGIC)
+ KEBUGCHECK(0);
+
+ return blk->Used.Tag;
+
+#endif /* WHOLE_PAGE_ALLOCATIONS */
+}
+
VOID STDCALL ExFreeNonPagedPool (PVOID block)
/*
* FUNCTION: Releases previously allocated memory
_____
Modified: trunk/reactos/ntoskrnl/ntoskrnl.mc
--- trunk/reactos/ntoskrnl/ntoskrnl.mc 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/ntoskrnl.mc 2005-05-05 17:20:10 UTC (rev
15008)
@@ -987,6 +987,14 @@
INVALID_WORK_QUEUE_ITEM
.
+MessageId=0xC2
+Severity=Success
+Facility=System
+SymbolicName=BAD_POOL_CALLER
+Language=English
+BAD_POOL_CALLER
+.
+
MessageId=0xE1
Severity=Success
Facility=System
_____
Modified: trunk/reactos/ntoskrnl/ob/object.c
--- trunk/reactos/ntoskrnl/ob/object.c 2005-05-05 16:16:28 UTC (rev
15007)
+++ trunk/reactos/ntoskrnl/ob/object.c 2005-05-05 17:20:10 UTC (rev
15008)
@@ -507,7 +507,7 @@
if (current)
RtlpCreateUnicodeString (RemainingPath, current, NonPagedPool);
- RtlFreeUnicodeString (&PathString);
+ ExFreePool(PathString.Buffer);
*ReturnedObject = CurrentObject;
return STATUS_SUCCESS;
@@ -806,7 +806,7 @@
}
RtlFreeUnicodeString(&Header->Name);
RtlFreeUnicodeString(&RemainingPath);
- ExFreePool(Header);
+ ExFreePoolWithTag(Header, Header->ObjectType->Tag);
DPRINT("Create Failed\n");
return Status;
}
@@ -1000,7 +1000,7 @@
}
DPRINT("ObPerformRetentionChecks() = Freeing object\n");
- ExFreePool(Header);
+ ExFreePoolWithTag(Header, Header->ObjectType->Tag);
return(STATUS_SUCCESS);
}
@@ -1010,16 +1010,14 @@
ObpDeleteObjectWorkRoutine (IN PVOID Parameter)
{
PRETENTION_CHECK_PARAMS Params = (PRETENTION_CHECK_PARAMS)Parameter;
- /* ULONG Tag; */ /* See below */
+ ULONG Tag;
ASSERT(Params);
ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); /* We need PAGED_CODE
somewhere... */
- /* Turn this on when we have ExFreePoolWithTag
- Tag = Params->ObjectHeader->ObjectType->Tag; */
+ Tag = Params->ObjectHeader->ObjectType->Tag;
ObpDeleteObject(Params->ObjectHeader);
- ExFreePool(Params);
- /* ExFreePoolWithTag(Params, Tag); */
+ ExFreePoolWithTag(Params, Tag);
}