mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 04:13:18 +00:00
[NTOS:MM] Do proper checks & acquire proper locks when sweeping user pages
CORE-17595
This commit is contained in:
parent
789d7a7741
commit
7c006df7e0
1 changed files with 14 additions and 7 deletions
|
@ -213,10 +213,14 @@ MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
|
||||||
|
|
||||||
MmLockAddressSpace(&Process->Vm);
|
MmLockAddressSpace(&Process->Vm);
|
||||||
|
|
||||||
/* Be sure this is still valid. */
|
if (!Process->VmDeleted)
|
||||||
PMMPTE Pte = MiAddressToPte(Address);
|
|
||||||
if (Pte->u.Hard.Valid)
|
|
||||||
{
|
{
|
||||||
|
MiLockProcessWorkingSetUnsafe(Process, PsGetCurrentThread());
|
||||||
|
|
||||||
|
/* Be sure this is still valid. */
|
||||||
|
if (MmIsAddressValid(Address))
|
||||||
|
{
|
||||||
|
PMMPTE Pte = MiAddressToPte(Address);
|
||||||
Accessed = Accessed || Pte->u.Hard.Accessed;
|
Accessed = Accessed || Pte->u.Hard.Accessed;
|
||||||
Pte->u.Hard.Accessed = 0;
|
Pte->u.Hard.Accessed = 0;
|
||||||
|
|
||||||
|
@ -224,6 +228,9 @@ MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
|
||||||
//KeInvalidateTlbEntry(Address);
|
//KeInvalidateTlbEntry(Address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MiUnlockProcessWorkingSet(Process, PsGetCurrentThread());
|
||||||
|
}
|
||||||
|
|
||||||
MmUnlockAddressSpace(&Process->Vm);
|
MmUnlockAddressSpace(&Process->Vm);
|
||||||
|
|
||||||
KeUnstackDetachProcess(&ApcState);
|
KeUnstackDetachProcess(&ApcState);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue