Author: tkreuzer Date: Sun Feb 16 13:56:36 2014 New Revision: 62217
URL: http://svn.reactos.org/svn/reactos?rev=62217&view=rev Log: [NTOSKRNL] Improve MiRemoveMappedPtes to be able to unmap session mapped views.
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] Sun Feb 16 13:56:36 2014 @@ -2118,12 +2118,14 @@ IN PCONTROL_AREA ControlArea, IN PMMSUPPORT Ws) { - PMMPTE PointerPte;//, FirstPte; + PMMPTE PointerPte, ProtoPte;//, FirstPte; PMMPDE PointerPde, SystemMapPde; PMMPFN Pfn1, Pfn2; MMPTE PteContents; KIRQL OldIrql; DPRINT("Removing mapped view at: 0x%p\n", BaseAddress); + + ASSERT(Ws == NULL);
/* Get the PTE and loop each one */ PointerPte = MiAddressToPte(BaseAddress); @@ -2175,8 +2177,15 @@ /* Windows ASSERT */ ASSERT((PteContents.u.Long == 0) || (PteContents.u.Soft.Prototype == 1));
- /* But not handled in ARM3 */ - ASSERT(PteContents.u.Soft.Prototype == 0); + /* Check if this is a prototype pointer PTE */ + if (PteContents.u.Soft.Prototype == 1) + { + /* Get the prototype PTE */ + ProtoPte = MiProtoPteToPte(&PteContents); + + /* We don't support anything else atm */ + ASSERT(ProtoPte->u.Long == 0); + } }
/* Make the PTE into a zero PTE */