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?rev=61081&r1=61080&r2=61081&view=diff
==============================================================================
--- 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 */


Reply via email to