Author: tkreuzer
Date: Sat Nov 23 00:43:06 2013
New Revision: 61081
URL: http://svn.reactos.org/svn/reactos?rev=61081&view=rev
Log:
[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
Modified:
trunk/reactos/ntoskrnl/mm/ARM3/section.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/section.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/section.c…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/section.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/section.c [iso-8859-1] Sat Nov 23 00:43:06 2013
@@ -1917,7 +1917,7 @@
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
@@ -2256,9 +2256,6 @@
ULONG Size;
PCONTROL_AREA ControlArea;
PAGED_CODE();
-
- /* Only global mappings supported for now */
- ASSERT(Session == &MmSession);
/* Remove this mapping */
KeAcquireGuardedMutex(Session->SystemSpaceViewLockPointer);
@@ -2783,6 +2780,12 @@
{
PAGED_CODE();
+ // HACK
+ if (MiIsRosSectionObject(Section))
+ {
+ return MmMapViewInSystemSpace(Section, MappedBase, ViewSize);
+ }
+
/* Process must be in a session */
if (PsGetCurrentProcess()->ProcessInSession == FALSE)
{
@@ -2806,6 +2809,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 @@
ASSERT(TempPte.u.Long != 0);
/* Loop all prototype PTEs to be committed */
+ PointerPte = ProtoPte;
while (PointerPte < LastProtoPte)
{
/* Make sure the PTE is already invalid */