- Fix MiSyncThreadProcessViews. Should fix bug 3658. Based on Stefan Ginsberg's patch.

See issue #3658 for more details.

svn path=/trunk/; revision=35352
This commit is contained in:
Aleksey Bragin 2008-08-15 12:17:08 +00:00
parent 5b1adcd907
commit 234e50df0d
6 changed files with 12 additions and 10 deletions

View file

@ -1556,7 +1556,8 @@ MmCheckSystemImage(
VOID
FASTCALL
MiSyncThreadProcessViews(
IN PKTHREAD NextThread
IN PKTHREAD NextThread,
IN PEPROCESS Process
);
extern PMM_AVL_TABLE MmKernelAddressSpace;

View file

@ -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

View file

@ -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())

View file

@ -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;

View file

@ -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);

View file

@ -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,