mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 02:10:07 +00:00
- 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:
parent
5b1adcd907
commit
234e50df0d
|
@ -1556,7 +1556,8 @@ MmCheckSystemImage(
|
|||
VOID
|
||||
FASTCALL
|
||||
MiSyncThreadProcessViews(
|
||||
IN PKTHREAD NextThread
|
||||
IN PKTHREAD NextThread,
|
||||
IN PEPROCESS Process
|
||||
);
|
||||
|
||||
extern PMM_AVL_TABLE MmKernelAddressSpace;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue