diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 502135124d8..fd9854b8e7b 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1556,7 +1556,8 @@ MmCheckSystemImage( VOID FASTCALL MiSyncThreadProcessViews( - IN PKTHREAD NextThread + IN PKTHREAD NextThread, + IN PEPROCESS Process ); extern PMM_AVL_TABLE MmKernelAddressSpace; diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/reactos/ntoskrnl/ke/i386/ctxswitch.S index 3cff2d27a1c..dbbebd66527 100644 --- a/reactos/ntoskrnl/ke/i386/ctxswitch.S +++ b/reactos/ntoskrnl/ke/i386/ctxswitch.S @@ -738,7 +738,8 @@ CheckNext: SwapContext: /* ReactOS Mm Hack */ mov ecx, esi - call @MiSyncThreadProcessViews@4 + mov edx, [edi+KTHREAD_APCSTATE_PROCESS] + call @MiSyncThreadProcessViews@8 /* Swap context at APC_LEVEL */ mov ecx, APC_LEVEL diff --git a/reactos/ntoskrnl/ke/procobj.c b/reactos/ntoskrnl/ke/procobj.c index e456824d133..242dc28a298 100644 --- a/reactos/ntoskrnl/ke/procobj.c +++ b/reactos/ntoskrnl/ke/procobj.c @@ -448,7 +448,7 @@ KeAttachProcess(IN PKPROCESS Process) ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ - MiSyncThreadProcessViews(Thread); + MiSyncThreadProcessViews(Thread, (PEPROCESS)Process); /* Check if we're already in that process */ if (Thread->ApcState.Process == Process) return; @@ -574,7 +574,7 @@ KeStackAttachProcess(IN PKPROCESS Process, ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ - MiSyncThreadProcessViews(Thread); + MiSyncThreadProcessViews(Thread, (PEPROCESS)Process); /* Crash system if DPC is being executed! */ if (KeIsExecutingDpc()) diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index dccfe9c4a80..14520ebecf0 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -811,7 +811,7 @@ KeInitThread(IN OUT PKTHREAD Thread, Thread->KernelStackResident = TRUE; /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ - MiSyncThreadProcessViews(Thread); + MiSyncThreadProcessViews(Thread, (PEPROCESS)Process); /* Enter SEH to avoid crashes due to user mode */ Status = STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c index 15a2d9f61a2..04db88dd24b 100644 --- a/reactos/ntoskrnl/ke/thrdschd.c +++ b/reactos/ntoskrnl/ke/thrdschd.c @@ -344,7 +344,7 @@ KiSwapThread(IN PKTHREAD CurrentThread, WaitIrql = CurrentThread->WaitIrql; /* REACTOS Mm Hack of Doom */ - MiSyncThreadProcessViews(NextThread); + MiSyncThreadProcessViews(NextThread, PsGetCurrentProcess()); /* Swap contexts */ ApcState = KiSwapContext(CurrentThread, NextThread); @@ -714,7 +714,7 @@ NtYieldExecution(VOID) ASSERT(OldIrql <= DISPATCH_LEVEL); /* REACTOS Mm Hack of Doom */ - MiSyncThreadProcessViews(NextThread); + MiSyncThreadProcessViews(NextThread, PsGetCurrentProcess()); /* Swap to new thread */ KiSwapContext(Thread, NextThread); diff --git a/reactos/ntoskrnl/mm/mm.c b/reactos/ntoskrnl/mm/mm.c index 82e9d0d20fc..0b985348aec 100644 --- a/reactos/ntoskrnl/mm/mm.c +++ b/reactos/ntoskrnl/mm/mm.c @@ -26,12 +26,12 @@ MM_STATS MmStats; VOID FASTCALL -MiSyncThreadProcessViews(IN PKTHREAD NextThread) +MiSyncThreadProcessViews(IN PKTHREAD NextThread, + IN PEPROCESS Process) { - PVOID Process = PsGetCurrentProcess(); PETHREAD Thread = CONTAINING_RECORD(NextThread, ETHREAD, Tcb); - /* Hack Sync because Mm is broken */ + /* Hack Sync because Mm is broken */ MmUpdatePageDir(Process, Thread, sizeof(ETHREAD)); MmUpdatePageDir(Process, Thread->ThreadsProcess, sizeof(EPROCESS)); MmUpdatePageDir(Process,