Author: sir_richard Date: Thu Jul 22 20:54:37 2010 New Revision: 48202
URL: http://svn.reactos.org/svn/reactos?rev=48202&view=rev Log: [NTOS]: Stop creating a memory area for the shared user data page. [NTOS]: Also stop creating a memory area for the illegal user-mode parts of address space. [NTOS]: Instead, mark the area between MM_HIGHEST_VAD_ADDRESS and MM_HIGHEST_USER_ADDRESS as being ARM3 as well: this way, ARM3 will get the illegal access (and fault), and it will also get the shared user data page access. [NTOS]: With the previous commit, ARM3 knows how to handle the shared user data page access, and does so succesfully. End result: two more MAREA types have been removed, and the address space setup code is now much simpler.
Modified: trunk/reactos/ntoskrnl/mm/ARM3/procsup.c trunk/reactos/ntoskrnl/mm/mmfault.c trunk/reactos/ntoskrnl/mm/procsup.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/procsup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/procsup.c?... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] Thu Jul 22 20:54:37 2010 @@ -33,7 +33,7 @@ Status = MmCreateMemoryArea(&Process->Vm, MEMORY_AREA_OWNED_BY_ARM3, &AllocatedBase, - ((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS - 1) - + ((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - 1) - (ULONG_PTR)MI_LOWEST_VAD_ADDRESS, PAGE_READWRITE, &MemoryArea,
Modified: trunk/reactos/ntoskrnl/mm/mmfault.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/mmfault.c?rev=4... ============================================================================== --- trunk/reactos/ntoskrnl/mm/mmfault.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/mmfault.c [iso-8859-1] Thu Jul 22 20:54:37 2010 @@ -105,10 +105,6 @@
switch (MemoryArea->Type) { - case MEMORY_AREA_SYSTEM: - Status = STATUS_ACCESS_VIOLATION; - break; - case MEMORY_AREA_PAGED_POOL: Status = STATUS_SUCCESS; break; @@ -124,10 +120,6 @@ Status = STATUS_ACCESS_VIOLATION; break;
- case MEMORY_AREA_SHARED_DATA: - Status = STATUS_ACCESS_VIOLATION; - break; - default: Status = STATUS_ACCESS_VIOLATION; break; @@ -153,7 +145,6 @@ MEMORY_AREA* MemoryArea; NTSTATUS Status; BOOLEAN Locked = FromMdl; - extern PMMPTE MmSharedUserDataPte;
DPRINT("MmNotPresentFault(Mode %d, Address %x)\n", Mode, Address);
@@ -211,10 +202,6 @@ break; }
- case MEMORY_AREA_SYSTEM: - Status = STATUS_ACCESS_VIOLATION; - break; - case MEMORY_AREA_SECTION_VIEW: Status = MmNotPresentFaultSectionView(AddressSpace, MemoryArea, @@ -223,16 +210,10 @@ break;
case MEMORY_AREA_VIRTUAL_MEMORY: - case MEMORY_AREA_PEB_OR_TEB: Status = MmNotPresentFaultVirtualMemory(AddressSpace, MemoryArea, (PVOID)Address, Locked); - break; - - case MEMORY_AREA_SHARED_DATA: - *MiAddressToPte(USER_SHARED_DATA) = *MmSharedUserDataPte; - Status = STATUS_SUCCESS; break;
default: @@ -284,7 +265,7 @@ * can go away. */ MemoryArea = MmLocateMemoryAreaByAddress(MmGetKernelAddressSpace(), Address); - if (!(MemoryArea) && (Address <= MM_HIGHEST_VAD_ADDRESS)) + if (!(MemoryArea) && (Address <= MM_HIGHEST_USER_ADDRESS)) { /* Could this be a VAD fault from user-mode? */ MemoryArea = MmLocateMemoryAreaByAddress(MmGetCurrentAddressSpace(), Address);
Modified: trunk/reactos/ntoskrnl/mm/procsup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/procsup.c?rev=4... ============================================================================== --- trunk/reactos/ntoskrnl/mm/procsup.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/procsup.c [iso-8859-1] Thu Jul 22 20:54:37 2010 @@ -14,35 +14,16 @@ #include <debug.h>
VOID NTAPI MiRosTakeOverPebTebRanges(IN PEPROCESS Process); + +/* FUNCTIONS *****************************************************************/
-/* FUNCTIONS *****************************************************************/ - NTSTATUS NTAPI MmInitializeHandBuiltProcess2(IN PEPROCESS Process) { - PVOID BaseAddress; - PMEMORY_AREA MemoryArea; - PHYSICAL_ADDRESS BoundaryAddressMultiple; - NTSTATUS Status; - PMMSUPPORT ProcessAddressSpace = &Process->Vm; - BoundaryAddressMultiple.QuadPart = 0; - - /* Create the shared data page */ - BaseAddress = (PVOID)USER_SHARED_DATA; - Status = MmCreateMemoryArea(ProcessAddressSpace, - MEMORY_AREA_SHARED_DATA, - &BaseAddress, - PAGE_SIZE, - PAGE_EXECUTE_READ, - &MemoryArea, - FALSE, - 0, - BoundaryAddressMultiple); - /* Lock the VAD, ARM3-owned ranges away */ MiRosTakeOverPebTebRanges(Process); - return Status; + return STATUS_SUCCESS; }
NTSTATUS @@ -53,15 +34,11 @@ IN OUT PULONG Flags, IN POBJECT_NAME_INFORMATION *AuditName OPTIONAL) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PMMSUPPORT ProcessAddressSpace = &Process->Vm; - PVOID BaseAddress; - PMEMORY_AREA MemoryArea; - PHYSICAL_ADDRESS BoundaryAddressMultiple; SIZE_T ViewSize = 0; PVOID ImageBase = 0; PROS_SECTION_OBJECT SectionObject = Section; - BoundaryAddressMultiple.QuadPart = 0;
/* Initialize the Addresss Space lock */ KeInitializeGuardedMutex(&Process->AddressCreationLock); @@ -73,59 +50,8 @@
/* Acquire the Lock */ MmLockAddressSpace(ProcessAddressSpace); - - /* Protect the highest 64KB of the process address space */ - BaseAddress = (PVOID)MmUserProbeAddress; - Status = MmCreateMemoryArea(ProcessAddressSpace, - MEMORY_AREA_NO_ACCESS, - &BaseAddress, - 0x10000, - PAGE_NOACCESS, - &MemoryArea, - FALSE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to protect last 64KB\n"); - goto exit; - } - - /* Protect the 60KB above the shared user page */ - BaseAddress = (char*)USER_SHARED_DATA + PAGE_SIZE; - Status = MmCreateMemoryArea(ProcessAddressSpace, - MEMORY_AREA_NO_ACCESS, - &BaseAddress, - 0x10000 - PAGE_SIZE, - PAGE_NOACCESS, - &MemoryArea, - FALSE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to protect the memory above the shared user page\n"); - goto exit; - } - - /* Create the shared data page */ - BaseAddress = (PVOID)USER_SHARED_DATA; - Status = MmCreateMemoryArea(ProcessAddressSpace, - MEMORY_AREA_SHARED_DATA, - &BaseAddress, - PAGE_SIZE, - PAGE_EXECUTE_READ, - &MemoryArea, - FALSE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to create Shared User Data\n"); - goto exit; - }
- /* Lock the VAD, ARM3-owned ranges away */ + /* Lock the VAD, ARM3-owned ranges away */ MiRosTakeOverPebTebRanges(Process);
/* The process now has an address space */ @@ -207,7 +133,6 @@ return Status; }
-exit: /* Unlock the Address Space */ DPRINT("Unlocking\n"); MmUnlockAddressSpace(ProcessAddressSpace); @@ -247,22 +172,15 @@ break;
case MEMORY_AREA_VIRTUAL_MEMORY: - case MEMORY_AREA_PEB_OR_TEB: MmFreeVirtualMemory(Process, MemoryArea); break;
- case MEMORY_AREA_SHARED_DATA: - case MEMORY_AREA_NO_ACCESS: case MEMORY_AREA_OWNED_BY_ARM3: MmFreeMemoryArea(&Process->Vm, MemoryArea, NULL, NULL); break; - - case MEMORY_AREA_MDL_MAPPING: - KeBugCheck(PROCESS_HAS_LOCKED_PAGES); - break;
default: KeBugCheck(MEMORY_MANAGEMENT);