mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:33:16 +00:00
[NTOSKRNL]
- Modify MiRosTakeOverPebTebRanges to only create a memory area for the shared user page and rename it to MiRosTakeOverSharedUserPage. Previously it was creating a memory area for the whole region from USER_SHARED_DATA up to MM_HIGHEST_USER_ADDRESS, which is the majority of the x64 user mode address space and doesn't even contain the PEB/TEB. Those are allocated below the shared user page and get their memory areas created in MiInsertNode. - Add amd64 versions of MmGetPageTableForProcess, MmUnmapPageTable, MmGetPageFileMapping svn path=/trunk/; revision=55438
This commit is contained in:
parent
78b0ef2aa4
commit
440561287c
2 changed files with 42 additions and 5 deletions
|
@ -24,7 +24,7 @@ PMMWSL MmWorkingSetList;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
MiRosTakeOverPebTebRanges(IN PEPROCESS Process)
|
MiRosTakeOverSharedUserPage(IN PEPROCESS Process)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PMEMORY_AREA MemoryArea;
|
PMEMORY_AREA MemoryArea;
|
||||||
|
@ -35,8 +35,7 @@ MiRosTakeOverPebTebRanges(IN PEPROCESS Process)
|
||||||
Status = MmCreateMemoryArea(&Process->Vm,
|
Status = MmCreateMemoryArea(&Process->Vm,
|
||||||
MEMORY_AREA_OWNED_BY_ARM3,
|
MEMORY_AREA_OWNED_BY_ARM3,
|
||||||
&AllocatedBase,
|
&AllocatedBase,
|
||||||
((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - 1) -
|
PAGE_SIZE,
|
||||||
(ULONG_PTR)USER_SHARED_DATA,
|
|
||||||
PAGE_READWRITE,
|
PAGE_READWRITE,
|
||||||
&MemoryArea,
|
&MemoryArea,
|
||||||
TRUE,
|
TRUE,
|
||||||
|
@ -1002,7 +1001,7 @@ MmInitializeProcessAddressSpace(IN PEPROCESS Process,
|
||||||
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
|
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
|
||||||
|
|
||||||
/* Lock the VAD, ARM3-owned ranges away */
|
/* Lock the VAD, ARM3-owned ranges away */
|
||||||
MiRosTakeOverPebTebRanges(Process);
|
MiRosTakeOverSharedUserPage(Process);
|
||||||
|
|
||||||
/* Check if there's a Section Object */
|
/* Check if there's a Section Object */
|
||||||
if (SectionObject)
|
if (SectionObject)
|
||||||
|
@ -1102,7 +1101,7 @@ INIT_FUNCTION
|
||||||
MmInitializeHandBuiltProcess2(IN PEPROCESS Process)
|
MmInitializeHandBuiltProcess2(IN PEPROCESS Process)
|
||||||
{
|
{
|
||||||
/* Lock the VAD, ARM3-owned ranges away */
|
/* Lock the VAD, ARM3-owned ranges away */
|
||||||
MiRosTakeOverPebTebRanges(Process);
|
MiRosTakeOverSharedUserPage(Process);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -336,6 +336,44 @@ MmIsPageSwapEntry(PEPROCESS Process, PVOID Address)
|
||||||
return Pte.u.Hard.Valid && Pte.u.Soft.Transition;
|
return Pte.u.Hard.Valid && Pte.u.Soft.Transition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PMMPTE
|
||||||
|
MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create)
|
||||||
|
{
|
||||||
|
__debugbreak();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN MmUnmapPageTable(PMMPTE Pt)
|
||||||
|
{
|
||||||
|
ASSERT(FALSE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG64 MmGetPageEntryForProcess(PEPROCESS Process, PVOID Address)
|
||||||
|
{
|
||||||
|
MMPTE Pte, *PointerPte;
|
||||||
|
|
||||||
|
PointerPte = MmGetPageTableForProcess(Process, Address, FALSE);
|
||||||
|
if (PointerPte)
|
||||||
|
{
|
||||||
|
Pte = *PointerPte;
|
||||||
|
MmUnmapPageTable(PointerPte);
|
||||||
|
return Pte.u.Long;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
MmGetPageFileMapping(
|
||||||
|
PEPROCESS Process,
|
||||||
|
PVOID Address,
|
||||||
|
SWAPENTRY* SwapEntry)
|
||||||
|
{
|
||||||
|
ULONG64 Entry = MmGetPageEntryForProcess(Process, Address);
|
||||||
|
*SwapEntry = Entry >> 1;
|
||||||
|
}
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
MmIsDirtyPage(PEPROCESS Process, PVOID Address)
|
MmIsDirtyPage(PEPROCESS Process, PVOID Address)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue