mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
[NTOSKRNL]
* Laa-a-a-a-dies and gentlemen..... It was a deferred success. Move along mes chers, you make the place look crowded. svn path=/trunk/; revision=55247
This commit is contained in:
parent
ddd36eed48
commit
75035a17de
7 changed files with 0 additions and 118 deletions
|
@ -6,20 +6,6 @@
|
||||||
|
|
||||||
struct _EPROCESS;
|
struct _EPROCESS;
|
||||||
|
|
||||||
/* ReactOS Mm Hacks */
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
MiSyncForProcessAttach(
|
|
||||||
IN PKTHREAD NextThread,
|
|
||||||
IN PEPROCESS Process
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
MiSyncForContextSwitch(
|
|
||||||
IN PKTHREAD Thread
|
|
||||||
);
|
|
||||||
|
|
||||||
extern PMMSUPPORT MmKernelAddressSpace;
|
extern PMMSUPPORT MmKernelAddressSpace;
|
||||||
extern PFN_COUNT MiFreeSwapPages;
|
extern PFN_COUNT MiFreeSwapPages;
|
||||||
extern PFN_COUNT MiUsedSwapPages;
|
extern PFN_COUNT MiUsedSwapPages;
|
||||||
|
|
|
@ -434,9 +434,6 @@ KiSwapContextEntry(IN PKSWITCHFRAME SwitchFrame,
|
||||||
OldThread = (PKTHREAD)(OldThreadAndApcFlag & ~3);
|
OldThread = (PKTHREAD)(OldThreadAndApcFlag & ~3);
|
||||||
NewThread = Pcr->PrcbData.CurrentThread;
|
NewThread = Pcr->PrcbData.CurrentThread;
|
||||||
|
|
||||||
/* ReactOS Mm Hack */
|
|
||||||
MiSyncForContextSwitch(NewThread);
|
|
||||||
|
|
||||||
/* Get the old thread and set its kernel stack */
|
/* Get the old thread and set its kernel stack */
|
||||||
OldThread->KernelStack = SwitchFrame;
|
OldThread->KernelStack = SwitchFrame;
|
||||||
|
|
||||||
|
|
|
@ -97,9 +97,6 @@ KiAttachProcess(IN PKTHREAD Thread,
|
||||||
/* Release lock */
|
/* Release lock */
|
||||||
KiReleaseApcLockFromDpcLevel(ApcLock);
|
KiReleaseApcLockFromDpcLevel(ApcLock);
|
||||||
|
|
||||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
|
||||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
|
||||||
|
|
||||||
/* Swap Processes */
|
/* Swap Processes */
|
||||||
KiSwapProcess(Process, SavedApcState->Process);
|
KiSwapProcess(Process, SavedApcState->Process);
|
||||||
|
|
||||||
|
@ -618,9 +615,6 @@ KeDetachProcess(VOID)
|
||||||
/* Release lock */
|
/* Release lock */
|
||||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||||
|
|
||||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
|
||||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
|
||||||
|
|
||||||
/* Swap Processes */
|
/* Swap Processes */
|
||||||
KiSwapProcess(Thread->ApcState.Process, Process);
|
KiSwapProcess(Thread->ApcState.Process, Process);
|
||||||
|
|
||||||
|
@ -788,9 +782,6 @@ KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
|
||||||
/* Release lock */
|
/* Release lock */
|
||||||
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
KiReleaseApcLockFromDpcLevel(&ApcLock);
|
||||||
|
|
||||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
|
||||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
|
||||||
|
|
||||||
/* Swap Processes */
|
/* Swap Processes */
|
||||||
KiSwapProcess(Thread->ApcState.Process, Process);
|
KiSwapProcess(Thread->ApcState.Process, Process);
|
||||||
|
|
||||||
|
|
|
@ -857,9 +857,6 @@ KeInitThread(IN OUT PKTHREAD Thread,
|
||||||
Thread->StackLimit = (ULONG_PTR)KernelStack - KERNEL_STACK_SIZE;
|
Thread->StackLimit = (ULONG_PTR)KernelStack - KERNEL_STACK_SIZE;
|
||||||
Thread->KernelStackResident = TRUE;
|
Thread->KernelStackResident = TRUE;
|
||||||
|
|
||||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
|
||||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
|
||||||
|
|
||||||
/* Enter SEH to avoid crashes due to user mode */
|
/* Enter SEH to avoid crashes due to user mode */
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
|
|
|
@ -394,9 +394,6 @@ KiSwapThread(IN PKTHREAD CurrentThread,
|
||||||
/* Save the wait IRQL */
|
/* Save the wait IRQL */
|
||||||
WaitIrql = CurrentThread->WaitIrql;
|
WaitIrql = CurrentThread->WaitIrql;
|
||||||
|
|
||||||
/* REACTOS Mm Hack of Doom */
|
|
||||||
MiSyncForContextSwitch(NextThread);
|
|
||||||
|
|
||||||
/* Swap contexts */
|
/* Swap contexts */
|
||||||
ApcState = KiSwapContext(WaitIrql, CurrentThread);
|
ApcState = KiSwapContext(WaitIrql, CurrentThread);
|
||||||
|
|
||||||
|
@ -793,9 +790,6 @@ NtYieldExecution(VOID)
|
||||||
/* Sanity check */
|
/* Sanity check */
|
||||||
ASSERT(OldIrql <= DISPATCH_LEVEL);
|
ASSERT(OldIrql <= DISPATCH_LEVEL);
|
||||||
|
|
||||||
/* REACTOS Mm Hack of Doom */
|
|
||||||
MiSyncForContextSwitch(NextThread);
|
|
||||||
|
|
||||||
/* Swap to new thread */
|
/* Swap to new thread */
|
||||||
KiSwapContext(APC_LEVEL, Thread);
|
KiSwapContext(APC_LEVEL, Thread);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
|
|
@ -1028,54 +1028,6 @@ MmGetPhysicalAddress(PVOID vaddr)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size)
|
|
||||||
{
|
|
||||||
ULONG StartOffset, EndOffset, Offset;
|
|
||||||
PULONG Pde;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check if the process isn't there anymore
|
|
||||||
// This is probably a bad sign, since it means the caller is setting cr3 to
|
|
||||||
// 0 or something...
|
|
||||||
//
|
|
||||||
if ((PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0]) == 0) && (Process != PsGetCurrentProcess()))
|
|
||||||
{
|
|
||||||
DPRINT1("Process: %16s is dead: %p\n", Process->ImageFileName, Process->Pcb.DirectoryTableBase[0]);
|
|
||||||
ASSERT(FALSE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Address < MmSystemRangeStart)
|
|
||||||
{
|
|
||||||
KeBugCheck(MEMORY_MANAGEMENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
StartOffset = ADDR_TO_PDE_OFFSET(Address);
|
|
||||||
EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size));
|
|
||||||
|
|
||||||
if (Process != NULL && Process != PsGetCurrentProcess())
|
|
||||||
{
|
|
||||||
Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0]));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Pde = (PULONG)PAGEDIRECTORY_MAP;
|
|
||||||
}
|
|
||||||
for (Offset = StartOffset; Offset <= EndOffset; Offset++)
|
|
||||||
{
|
|
||||||
if (Offset != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP))
|
|
||||||
{
|
|
||||||
InterlockedCompareExchangePte(&Pde[Offset], MmGlobalKernelPageDirectory[Offset], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Pde != (PULONG)PAGEDIRECTORY_MAP)
|
|
||||||
{
|
|
||||||
MmDeleteHyperspaceMapping(Pde);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
INIT_FUNCTION
|
INIT_FUNCTION
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -20,41 +20,6 @@
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
MiSyncForProcessAttach(IN PKTHREAD Thread,
|
|
||||||
IN PEPROCESS Process)
|
|
||||||
{
|
|
||||||
PETHREAD Ethread = CONTAINING_RECORD(Thread, ETHREAD, Tcb);
|
|
||||||
//DPRINT1("Hack sync for process: %p and thread: %p\n", Process, Thread);
|
|
||||||
//DPRINT1("Thread stack hack: %p %d\n", Thread->StackLimit, Thread->LargeStack);
|
|
||||||
|
|
||||||
/* Hack Sync because Mm is broken */
|
|
||||||
MmUpdatePageDir(Process, Ethread, sizeof(ETHREAD));
|
|
||||||
MmUpdatePageDir(Process, Ethread->ThreadsProcess, sizeof(EPROCESS));
|
|
||||||
MmUpdatePageDir(Process,
|
|
||||||
(PVOID)Thread->StackLimit,
|
|
||||||
Thread->LargeStack ?
|
|
||||||
KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
MiSyncForContextSwitch(IN PKTHREAD Thread)
|
|
||||||
{
|
|
||||||
PVOID Process = PsGetCurrentProcess();
|
|
||||||
PETHREAD Ethread = CONTAINING_RECORD(Thread, ETHREAD, Tcb);
|
|
||||||
//DPRINT1("Hack sync for thread: %p and process: %p\n", Thread, Process);
|
|
||||||
//DPRINT1("Thread stack hack: %p %d\n", Thread->StackLimit, Thread->LargeStack);
|
|
||||||
|
|
||||||
/* Hack Sync because Mm is broken */
|
|
||||||
MmUpdatePageDir(Process, Ethread->ThreadsProcess, sizeof(EPROCESS));
|
|
||||||
MmUpdatePageDir(Process,
|
|
||||||
(PVOID)Thread->StackLimit,
|
|
||||||
Thread->LargeStack ?
|
|
||||||
KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
MmpAccessFault(KPROCESSOR_MODE Mode,
|
MmpAccessFault(KPROCESSOR_MODE Mode,
|
||||||
|
|
Loading…
Reference in a new issue