mirror of
https://github.com/reactos/reactos.git
synced 2024-09-29 05:54:05 +00:00
[NTOSKRNL]
- Add hacks to MmMapViewInSessionSpace and MmUnmapViewInSessionSpace to check for legacy (non ARM3) sections (image sections) and (un)map them in system space instead. - Fix MmCommitSessionMappedView (it wasn't resetting the PointerPte to the start, when processing the PTE range a second time) - Remove an ASSERT that didn't allow unmapping session space mappings, since that works (see CORE-6729) - Change a write to a PTE to using MI_WRITE_VALID_PTE svn path=/trunk/; revision=61081
This commit is contained in:
parent
78d080bef8
commit
b59f1ee141
|
@ -1917,7 +1917,7 @@ MiFlushTbAndCapture(IN PMMVAD FoundVad,
|
|||
ASSERT(PointerPte->u.Hard.Valid == 1);
|
||||
ASSERT(TempPte.u.Hard.Valid == 1);
|
||||
ASSERT(PointerPte->u.Hard.PageFrameNumber == TempPte.u.Hard.PageFrameNumber);
|
||||
*PointerPte = TempPte;
|
||||
MI_WRITE_VALID_PTE(PointerPte, TempPte);
|
||||
|
||||
//
|
||||
// Flush the TLB
|
||||
|
@ -2257,9 +2257,6 @@ MiUnmapViewInSystemSpace(IN PMMSESSION Session,
|
|||
PCONTROL_AREA ControlArea;
|
||||
PAGED_CODE();
|
||||
|
||||
/* Only global mappings supported for now */
|
||||
ASSERT(Session == &MmSession);
|
||||
|
||||
/* Remove this mapping */
|
||||
KeAcquireGuardedMutex(Session->SystemSpaceViewLockPointer);
|
||||
Size = MiRemoveFromSystemSpace(Session, MappedBase, &ControlArea);
|
||||
|
@ -2783,6 +2780,12 @@ MmMapViewInSessionSpace(IN PVOID Section,
|
|||
{
|
||||
PAGED_CODE();
|
||||
|
||||
// HACK
|
||||
if (MiIsRosSectionObject(Section))
|
||||
{
|
||||
return MmMapViewInSystemSpace(Section, MappedBase, ViewSize);
|
||||
}
|
||||
|
||||
/* Process must be in a session */
|
||||
if (PsGetCurrentProcess()->ProcessInSession == FALSE)
|
||||
{
|
||||
|
@ -2807,6 +2810,12 @@ MmUnmapViewInSessionSpace(IN PVOID MappedBase)
|
|||
{
|
||||
PAGED_CODE();
|
||||
|
||||
// HACK
|
||||
if (!MI_IS_SESSION_ADDRESS(MappedBase))
|
||||
{
|
||||
return MmUnmapViewInSystemSpace(MappedBase);
|
||||
}
|
||||
|
||||
/* Process must be in a session */
|
||||
if (PsGetCurrentProcess()->ProcessInSession == FALSE)
|
||||
{
|
||||
|
@ -2990,6 +2999,7 @@ MmCommitSessionMappedView(IN PVOID MappedBase,
|
|||
ASSERT(TempPte.u.Long != 0);
|
||||
|
||||
/* Loop all prototype PTEs to be committed */
|
||||
PointerPte = ProtoPte;
|
||||
while (PointerPte < LastProtoPte)
|
||||
{
|
||||
/* Make sure the PTE is already invalid */
|
||||
|
|
Loading…
Reference in a new issue