diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index f9dd06d739d..27be0448fa2 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -367,6 +367,7 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, { MEMORY_AREA* MemoryArea; ULONG i; + PEPROCESS CurrentProcess = PsGetCurrentProcess(); DPRINT("MmFreeMemoryArea(AddressSpace %x, BaseAddress %x, Length %x," "FreePageContext %d)\n",AddressSpace,BaseAddress,Length, @@ -379,6 +380,11 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, KeBugCheck(0); return(STATUS_UNSUCCESSFUL); } + if (AddressSpace->Process != NULL && + AddressSpace->Process != CurrentProcess) + { + KeAttachProcess(AddressSpace->Process); + } for (i=0; i<(PAGE_ROUND_UP(MemoryArea->Length)/PAGE_SIZE); i++) { PHYSICAL_ADDRESS PhysAddr = (PHYSICAL_ADDRESS)0LL; @@ -406,7 +412,11 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, SwapEntry, Dirty); } } - + if (AddressSpace->Process != NULL && + AddressSpace->Process != CurrentProcess) + { + KeDetachProcess(); + } RemoveEntryList(&MemoryArea->Entry); ExFreePool(MemoryArea);