mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Merged MmReleaseMemoryArea into MmReleaseMmInfo.
We can only release the address space look if we are calling MmUnmapViewOfSection. svn path=/trunk/; revision=18850
This commit is contained in:
parent
5e158693d9
commit
f4d5030a94
1 changed files with 36 additions and 44 deletions
|
@ -28,58 +28,50 @@ MM_STATS MmStats;
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS MmReleaseMemoryArea(PEPROCESS Process, PMEMORY_AREA Marea)
|
NTSTATUS
|
||||||
{
|
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
DPRINT("MmReleaseMemoryArea(Process %x, Marea %x)\n",Process,Marea);
|
|
||||||
|
|
||||||
DPRINT("Releasing %x between %x %x (type %d)\n",
|
|
||||||
Marea, Marea->StartingAddress, Marea->EndingAddress,
|
|
||||||
Marea->Type);
|
|
||||||
|
|
||||||
switch (Marea->Type)
|
|
||||||
{
|
|
||||||
case MEMORY_AREA_SECTION_VIEW:
|
|
||||||
Status = MmUnmapViewOfSection(Process, (PVOID)Marea->StartingAddress);
|
|
||||||
ASSERT(Status == STATUS_SUCCESS);
|
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
|
|
||||||
case MEMORY_AREA_VIRTUAL_MEMORY:
|
|
||||||
case MEMORY_AREA_PEB_OR_TEB:
|
|
||||||
MmFreeVirtualMemory(Process, Marea);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MEMORY_AREA_SHARED_DATA:
|
|
||||||
case MEMORY_AREA_NO_ACCESS:
|
|
||||||
Status = MmFreeMemoryArea(&Process->AddressSpace,
|
|
||||||
Marea,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MEMORY_AREA_MDL_MAPPING:
|
|
||||||
KEBUGCHECK(PROCESS_HAS_LOCKED_PAGES);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
KEBUGCHECK(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
NTAPI
|
||||||
MmReleaseMmInfo(PEPROCESS Process)
|
MmReleaseMmInfo(PEPROCESS Process)
|
||||||
{
|
{
|
||||||
|
PVOID Address;
|
||||||
|
PMEMORY_AREA MemoryArea;
|
||||||
|
|
||||||
DPRINT("MmReleaseMmInfo(Process %x (%s))\n", Process,
|
DPRINT("MmReleaseMmInfo(Process %x (%s))\n", Process,
|
||||||
Process->ImageFileName);
|
Process->ImageFileName);
|
||||||
|
|
||||||
MmLockAddressSpace(&Process->AddressSpace);
|
MmLockAddressSpace(&Process->AddressSpace);
|
||||||
|
|
||||||
while (Process->AddressSpace.MemoryAreaRoot != NULL)
|
while ((MemoryArea = Process->AddressSpace.MemoryAreaRoot) != NULL)
|
||||||
MmReleaseMemoryArea(Process, Process->AddressSpace.MemoryAreaRoot);
|
{
|
||||||
|
switch (MemoryArea->Type)
|
||||||
|
{
|
||||||
|
case MEMORY_AREA_SECTION_VIEW:
|
||||||
|
Address = (PVOID)MemoryArea->StartingAddress;
|
||||||
|
MmUnlockAddressSpace(&Process->AddressSpace);
|
||||||
|
MmUnmapViewOfSection(Process, Address);
|
||||||
|
MmLockAddressSpace(&Process->AddressSpace);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEMORY_AREA_VIRTUAL_MEMORY:
|
||||||
|
case MEMORY_AREA_PEB_OR_TEB:
|
||||||
|
MmFreeVirtualMemory(Process, MemoryArea);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEMORY_AREA_SHARED_DATA:
|
||||||
|
case MEMORY_AREA_NO_ACCESS:
|
||||||
|
MmFreeMemoryArea(&Process->AddressSpace,
|
||||||
|
MemoryArea,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEMORY_AREA_MDL_MAPPING:
|
||||||
|
KEBUGCHECK(PROCESS_HAS_LOCKED_PAGES);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
KEBUGCHECK(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Mmi386ReleaseMmInfo(Process);
|
Mmi386ReleaseMmInfo(Process);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue