mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 06:27:38 +00:00
- Use EPROCESS 's AddressCreationLock instead of the MADDRESS_SPACE Lock.
- Overlay MADDRES_SPACE over MM_AVL_NODE. Even though our structures are currently incompatible, they represent the same thing (The EPROCESS's Address space). svn path=/trunk/; revision=21934
This commit is contained in:
parent
93a0bb6787
commit
7b3c313c1c
|
@ -219,7 +219,6 @@ typedef struct _MEMORY_AREA
|
|||
ULONG Type;
|
||||
ULONG Protect;
|
||||
ULONG Flags;
|
||||
ULONG LockCount;
|
||||
BOOLEAN DeleteInProgress;
|
||||
ULONG PageOpCount;
|
||||
union
|
||||
|
@ -242,7 +241,6 @@ typedef struct _MEMORY_AREA
|
|||
typedef struct _MADDRESS_SPACE
|
||||
{
|
||||
PMEMORY_AREA MemoryAreaRoot;
|
||||
FAST_MUTEX Lock;
|
||||
PVOID LowestAddress;
|
||||
struct _ROS_EPROCESS* Process;
|
||||
PUSHORT PageTableRefCountTable;
|
||||
|
|
|
@ -45,7 +45,7 @@ typedef struct _ROS_EPROCESS
|
|||
EX_PUSH_LOCK AddressCreationLock;
|
||||
PETHREAD RotateInProgress;
|
||||
#else
|
||||
KGUARDED_MUTEX AddressCreationLock;
|
||||
FAST_MUTEX AddressCreationLock; // FIXME: FAST_MUTEX for XP, KGUARDED_MUTEX for 2K3
|
||||
KSPIN_LOCK HyperSpaceLock;
|
||||
#endif
|
||||
PETHREAD ForkInProgress;
|
||||
|
@ -200,7 +200,6 @@ typedef struct _ROS_EPROCESS
|
|||
UCHAR PriorityClass;
|
||||
MM_AVL_TABLE VadRoot;
|
||||
ULONG Cookie;
|
||||
MADDRESS_SPACE AddressSpace;
|
||||
} ROS_EPROCESS, *PROS_EPROCESS;
|
||||
#include <poppack.h>
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ HalReleaseDisplayOwnership(
|
|||
VOID
|
||||
);
|
||||
|
||||
extern FAST_MUTEX KernelAddressSpaceLock;
|
||||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
static LIST_ENTRY BugcheckCallbackListHead = {NULL,NULL};
|
||||
|
@ -341,7 +343,7 @@ KeBugCheckWithTf(ULONG BugCheckCode,
|
|||
KeRaiseIrql(HIGH_LEVEL, &OldIrql);
|
||||
|
||||
/* Unload the Kernel Adress Space if we own it */
|
||||
if (MmGetKernelAddressSpace()->Lock.Owner == KeGetCurrentThread())
|
||||
if (KernelAddressSpaceLock.Owner == KeGetCurrentThread())
|
||||
MmUnlockAddressSpace(MmGetKernelAddressSpace());
|
||||
|
||||
/* FIXMEs: Use inbv to clear, fill and write to screen. */
|
||||
|
|
|
@ -679,7 +679,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle,
|
|||
Type = (AllocationType & MEM_COMMIT) ? MEM_COMMIT : MEM_RESERVE;
|
||||
DPRINT("Type %x\n", Type);
|
||||
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
|
||||
if (PBaseAddress != 0)
|
||||
|
@ -833,7 +833,7 @@ MmFreeVirtualMemory(PROS_EPROCESS Process,
|
|||
if (PageOp != NULL)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
MmUnlockAddressSpace(&Process->AddressSpace);
|
||||
MmUnlockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
Status = KeWaitForSingleObject(&PageOp->CompletionEvent,
|
||||
0,
|
||||
KernelMode,
|
||||
|
@ -844,7 +844,7 @@ MmFreeVirtualMemory(PROS_EPROCESS Process,
|
|||
DPRINT1("Failed to wait for page op\n");
|
||||
KEBUGCHECK(0);
|
||||
}
|
||||
MmLockAddressSpace(&Process->AddressSpace);
|
||||
MmLockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
MmReleasePageOp(PageOp);
|
||||
}
|
||||
}
|
||||
|
@ -860,7 +860,7 @@ MmFreeVirtualMemory(PROS_EPROCESS Process,
|
|||
}
|
||||
|
||||
/* Actually free the memory area. */
|
||||
MmFreeMemoryArea(&Process->AddressSpace,
|
||||
MmFreeMemoryArea((PMADDRESS_SPACE)&Process->VadRoot,
|
||||
MemoryArea,
|
||||
MmFreeVirtualMemoryPage,
|
||||
(PVOID)Process);
|
||||
|
@ -913,7 +913,7 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
|
|||
return(Status);
|
||||
}
|
||||
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, BaseAddress);
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
STATIC MADDRESS_SPACE KernelAddressSpace;
|
||||
static MADDRESS_SPACE KernelAddressSpace;
|
||||
FAST_MUTEX KernelAddressSpaceLock;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -35,7 +36,15 @@ MmLockAddressSpace(PMADDRESS_SPACE AddressSpace)
|
|||
{
|
||||
return;
|
||||
}
|
||||
ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&AddressSpace->Lock);
|
||||
|
||||
if (AddressSpace->Process)
|
||||
{
|
||||
ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&AddressSpace->Process->AddressCreationLock);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&KernelAddressSpaceLock);
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -49,7 +58,14 @@ MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace)
|
|||
{
|
||||
return;
|
||||
}
|
||||
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&AddressSpace->Lock);
|
||||
if (AddressSpace->Process)
|
||||
{
|
||||
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&AddressSpace->Process->AddressCreationLock);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&KernelAddressSpaceLock);
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -64,7 +80,7 @@ PMADDRESS_SPACE
|
|||
NTAPI
|
||||
MmGetCurrentAddressSpace(VOID)
|
||||
{
|
||||
return(&((PROS_EPROCESS)PsGetCurrentProcess())->AddressSpace);
|
||||
return((PMADDRESS_SPACE)&((PROS_EPROCESS)PsGetCurrentProcess())->VadRoot);
|
||||
}
|
||||
|
||||
PMADDRESS_SPACE
|
||||
|
@ -80,7 +96,14 @@ MmInitializeAddressSpace(PROS_EPROCESS Process,
|
|||
PMADDRESS_SPACE AddressSpace)
|
||||
{
|
||||
AddressSpace->MemoryAreaRoot = NULL;
|
||||
ExInitializeFastMutex(&AddressSpace->Lock);
|
||||
if (Process)
|
||||
{
|
||||
ExInitializeFastMutex(&Process->AddressCreationLock);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExInitializeFastMutex(&KernelAddressSpaceLock);
|
||||
}
|
||||
if (Process != NULL)
|
||||
{
|
||||
AddressSpace->LowestAddress = MM_LOWEST_USER_ADDRESS;
|
||||
|
|
|
@ -243,7 +243,7 @@ Mmi386ReleaseMmInfo(PROS_EPROCESS Process)
|
|||
DPRINT1("ProcessId %d, Pde for %08x - %08x is not freed, RefCount %d\n",
|
||||
Process->UniqueProcessId,
|
||||
(i * 512 + j) * 512 * PAGE_SIZE, (i * 512 + j + 1) * 512 * PAGE_SIZE - 1,
|
||||
Process->AddressSpace.PageTableRefCountTable[i*512 + j]);
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable[i*512 + j]);
|
||||
Pde = MmCreateHyperspaceMapping(PAE_PTE_TO_PFN(PageDir[j]));
|
||||
for (k = 0; k < 512; k++)
|
||||
{
|
||||
|
@ -288,7 +288,7 @@ Mmi386ReleaseMmInfo(PROS_EPROCESS Process)
|
|||
{
|
||||
DPRINT1("Pde for %08x - %08x is not freed, RefCount %d\n",
|
||||
i * 4 * 1024 * 1024, (i + 1) * 4 * 1024 * 1024 - 1,
|
||||
Process->AddressSpace.PageTableRefCountTable[i]);
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable[i]);
|
||||
Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(PageDir[i]));
|
||||
for (j = 0; j < 1024; j++)
|
||||
{
|
||||
|
@ -1041,13 +1041,13 @@ MmDeleteVirtualMapping(PROS_EPROCESS Process, PVOID Address, BOOLEAN FreePage,
|
|||
* Decrement the reference count for this page table.
|
||||
*/
|
||||
if (Process != NULL && WasValid &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Address < MmSystemRangeStart)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
ULONG Idx;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
Idx = Ke386Pae ? PAE_ADDR_TO_PAGE_TABLE(Address) : ADDR_TO_PAGE_TABLE(Address);
|
||||
|
||||
Ptrc[Idx]--;
|
||||
|
@ -1090,12 +1090,12 @@ MmDeletePageFileMapping(PROS_EPROCESS Process, PVOID Address,
|
|||
* Decrement the reference count for this page table.
|
||||
*/
|
||||
if (Process != NULL && Pte &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Address < MmSystemRangeStart)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
|
||||
Ptrc[PAE_ADDR_TO_PAGE_TABLE(Address)]--;
|
||||
if (Ptrc[PAE_ADDR_TO_PAGE_TABLE(Address)] == 0)
|
||||
|
@ -1134,12 +1134,12 @@ MmDeletePageFileMapping(PROS_EPROCESS Process, PVOID Address,
|
|||
* Decrement the reference count for this page table.
|
||||
*/
|
||||
if (Process != NULL && Pte &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Address < MmSystemRangeStart)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
|
||||
Ptrc[ADDR_TO_PAGE_TABLE(Address)]--;
|
||||
if (Ptrc[ADDR_TO_PAGE_TABLE(Address)] == 0)
|
||||
|
@ -1694,13 +1694,13 @@ MmCreatePageFileMapping(PROS_EPROCESS Process,
|
|||
}
|
||||
}
|
||||
if (Process != NULL &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Address < MmSystemRangeStart)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
ULONG Idx;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
Idx = Ke386Pae ? PAE_ADDR_TO_PAGE_TABLE(Address) : ADDR_TO_PAGE_TABLE(Address);
|
||||
Ptrc[Idx]++;
|
||||
}
|
||||
|
@ -1823,12 +1823,12 @@ MmCreateVirtualMappingUnsafe(PROS_EPROCESS Process,
|
|||
MmMarkPageUnmapped(PAE_PTE_TO_PFN((Pte)));
|
||||
}
|
||||
if (Address < MmSystemRangeStart &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Attributes & PA_PRESENT)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
|
||||
Ptrc[PAE_ADDR_TO_PAGE_TABLE(Addr)]++;
|
||||
}
|
||||
|
@ -1888,12 +1888,12 @@ MmCreateVirtualMappingUnsafe(PROS_EPROCESS Process,
|
|||
}
|
||||
(void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes);
|
||||
if (Address < MmSystemRangeStart &&
|
||||
Process->AddressSpace.PageTableRefCountTable != NULL &&
|
||||
((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable != NULL &&
|
||||
Attributes & PA_PRESENT)
|
||||
{
|
||||
PUSHORT Ptrc;
|
||||
|
||||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
Ptrc = ((PMADDRESS_SPACE)&Process->VadRoot)->PageTableRefCountTable;
|
||||
|
||||
Ptrc[ADDR_TO_PAGE_TABLE(Addr)]++;
|
||||
}
|
||||
|
|
|
@ -1011,7 +1011,7 @@ MmCreateMemoryArea(PMADDRESS_SPACE AddressSpace,
|
|||
MemoryArea->EndingAddress = (PVOID)((ULONG_PTR)*BaseAddress + tmpLength);
|
||||
MemoryArea->Protect = Protect;
|
||||
MemoryArea->Flags = AllocationFlags;
|
||||
MemoryArea->LockCount = 0;
|
||||
//MemoryArea->LockCount = 0;
|
||||
MemoryArea->PageOpCount = 0;
|
||||
MemoryArea->DeleteInProgress = FALSE;
|
||||
|
||||
|
|
|
@ -273,14 +273,14 @@ MmUnmapLockedPages(PVOID BaseAddress, PMDL Mdl)
|
|||
|
||||
ASSERT(Mdl->Process == PsGetCurrentProcess());
|
||||
|
||||
Marea = MmLocateMemoryAreaByAddress( &((PROS_EPROCESS)Mdl->Process)->AddressSpace, BaseAddress );
|
||||
Marea = MmLocateMemoryAreaByAddress( (PMADDRESS_SPACE)&((PROS_EPROCESS)Mdl->Process)->VadRoot, BaseAddress );
|
||||
if (Marea == NULL)
|
||||
{
|
||||
DPRINT1( "Couldn't open memory area when unmapping user-space pages!\n" );
|
||||
KEBUGCHECK(0);
|
||||
}
|
||||
|
||||
MmFreeMemoryArea( &((PROS_EPROCESS)Mdl->Process)->AddressSpace, Marea, NULL, NULL );
|
||||
MmFreeMemoryArea( (PMADDRESS_SPACE)&((PROS_EPROCESS)Mdl->Process)->VadRoot, Marea, NULL, NULL );
|
||||
|
||||
Mdl->Process = NULL;
|
||||
}
|
||||
|
@ -411,7 +411,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
|
|||
/* FIXME: why isn't AccessMode used? */
|
||||
Mode = UserMode;
|
||||
Mdl->Process = CurrentProcess;
|
||||
AddressSpace = &((PROS_EPROCESS)CurrentProcess)->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)CurrentProcess)->VadRoot;
|
||||
}
|
||||
|
||||
|
||||
|
@ -805,8 +805,8 @@ MmMapLockedPagesSpecifyCache ( IN PMDL Mdl,
|
|||
|
||||
CurrentProcess = (PROS_EPROCESS)PsGetCurrentProcess();
|
||||
|
||||
MmLockAddressSpace(&CurrentProcess->AddressSpace);
|
||||
Status = MmCreateMemoryArea(&CurrentProcess->AddressSpace,
|
||||
MmLockAddressSpace((PMADDRESS_SPACE)&CurrentProcess->VadRoot);
|
||||
Status = MmCreateMemoryArea((PMADDRESS_SPACE)&CurrentProcess->VadRoot,
|
||||
MEMORY_AREA_MDL_MAPPING,
|
||||
&Base,
|
||||
PageCount * PAGE_SIZE,
|
||||
|
@ -815,7 +815,7 @@ MmMapLockedPagesSpecifyCache ( IN PMDL Mdl,
|
|||
(Base != NULL),
|
||||
0,
|
||||
BoundaryAddressMultiple);
|
||||
MmUnlockAddressSpace(&CurrentProcess->AddressSpace);
|
||||
MmUnlockAddressSpace((PMADDRESS_SPACE)&CurrentProcess->VadRoot);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (Mdl->MdlFlags & MDL_MAPPING_CAN_FAIL)
|
||||
|
|
|
@ -38,17 +38,17 @@ MmReleaseMmInfo(PROS_EPROCESS Process)
|
|||
DPRINT("MmReleaseMmInfo(Process %x (%s))\n", Process,
|
||||
Process->ImageFileName);
|
||||
|
||||
MmLockAddressSpace(&Process->AddressSpace);
|
||||
MmLockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
|
||||
while ((MemoryArea = Process->AddressSpace.MemoryAreaRoot) != NULL)
|
||||
while ((MemoryArea = ((PMADDRESS_SPACE)&Process->VadRoot)->MemoryAreaRoot) != NULL)
|
||||
{
|
||||
switch (MemoryArea->Type)
|
||||
{
|
||||
case MEMORY_AREA_SECTION_VIEW:
|
||||
Address = (PVOID)MemoryArea->StartingAddress;
|
||||
MmUnlockAddressSpace(&Process->AddressSpace);
|
||||
MmUnlockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
MmUnmapViewOfSection((PEPROCESS)Process, Address);
|
||||
MmLockAddressSpace(&Process->AddressSpace);
|
||||
MmLockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
break;
|
||||
|
||||
case MEMORY_AREA_VIRTUAL_MEMORY:
|
||||
|
@ -58,7 +58,7 @@ MmReleaseMmInfo(PROS_EPROCESS Process)
|
|||
|
||||
case MEMORY_AREA_SHARED_DATA:
|
||||
case MEMORY_AREA_NO_ACCESS:
|
||||
MmFreeMemoryArea(&Process->AddressSpace,
|
||||
MmFreeMemoryArea((PMADDRESS_SPACE)&Process->VadRoot,
|
||||
MemoryArea,
|
||||
NULL,
|
||||
NULL);
|
||||
|
@ -75,8 +75,8 @@ MmReleaseMmInfo(PROS_EPROCESS Process)
|
|||
|
||||
Mmi386ReleaseMmInfo(Process);
|
||||
|
||||
MmUnlockAddressSpace(&Process->AddressSpace);
|
||||
MmDestroyAddressSpace(&Process->AddressSpace);
|
||||
MmUnlockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
MmDestroyAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
|
||||
DPRINT("Finished MmReleaseMmInfo()\n");
|
||||
return(STATUS_SUCCESS);
|
||||
|
@ -114,7 +114,7 @@ BOOLEAN STDCALL MmIsAddressValid(PVOID VirtualAddress)
|
|||
}
|
||||
else
|
||||
{
|
||||
AddressSpace = &((PROS_EPROCESS)PsGetCurrentProcess())->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)PsGetCurrentProcess())->VadRoot;
|
||||
}
|
||||
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
|
@ -171,7 +171,7 @@ MmAccessFault(KPROCESSOR_MODE Mode,
|
|||
}
|
||||
else
|
||||
{
|
||||
AddressSpace = &((PROS_EPROCESS)PsGetCurrentProcess())->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)PsGetCurrentProcess())->VadRoot;
|
||||
}
|
||||
|
||||
if (!FromMdl)
|
||||
|
@ -304,7 +304,7 @@ MmNotPresentFault(KPROCESSOR_MODE Mode,
|
|||
}
|
||||
else
|
||||
{
|
||||
AddressSpace = &((PROS_EPROCESS)PsGetCurrentProcess())->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)PsGetCurrentProcess())->VadRoot;
|
||||
}
|
||||
|
||||
if (!FromMdl)
|
||||
|
|
|
@ -29,7 +29,7 @@ MiCreatePebOrTeb(PROS_EPROCESS Process,
|
|||
PVOID BaseAddress)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
|
||||
PMADDRESS_SPACE ProcessAddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
PMEMORY_AREA MemoryArea;
|
||||
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
||||
PVOID AllocatedBase = BaseAddress;
|
||||
|
@ -110,7 +110,7 @@ STDCALL
|
|||
MmDeleteTeb(PROS_EPROCESS Process,
|
||||
PTEB Teb)
|
||||
{
|
||||
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
|
||||
PMADDRESS_SPACE ProcessAddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
PMEMORY_AREA MemoryArea;
|
||||
|
||||
/* Lock the Address Space */
|
||||
|
@ -424,7 +424,7 @@ MmCreateProcessAddressSpace(IN PROS_EPROCESS Process,
|
|||
IN PROS_SECTION_OBJECT Section OPTIONAL)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
|
||||
PMADDRESS_SPACE ProcessAddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
PVOID BaseAddress;
|
||||
PMEMORY_AREA MemoryArea;
|
||||
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
||||
|
|
|
@ -92,7 +92,7 @@ MmWritePagePhysicalAddress(PFN_TYPE Page)
|
|||
{
|
||||
return Status;
|
||||
}
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -223,7 +223,7 @@ MmPageOutPhysicalAddress(PFN_TYPE Page)
|
|||
{
|
||||
return Status;
|
||||
}
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1338,7 +1338,7 @@ MmPageOutDeleteMapping(PVOID Context, PROS_EPROCESS Process, PVOID Address)
|
|||
PageOutContext = (MM_SECTION_PAGEOUT_CONTEXT*)Context;
|
||||
if (Process)
|
||||
{
|
||||
MmLockAddressSpace(&Process->AddressSpace);
|
||||
MmLockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
}
|
||||
|
||||
MmDeleteVirtualMapping(Process,
|
||||
|
@ -1362,7 +1362,7 @@ MmPageOutDeleteMapping(PVOID Context, PROS_EPROCESS Process, PVOID Address)
|
|||
}
|
||||
if (Process)
|
||||
{
|
||||
MmUnlockAddressSpace(&Process->AddressSpace);
|
||||
MmUnlockAddressSpace((PMADDRESS_SPACE)&Process->VadRoot);
|
||||
}
|
||||
|
||||
if (PageOutContext->Private)
|
||||
|
@ -3676,7 +3676,7 @@ NtMapViewOfSection(IN HANDLE SectionHandle,
|
|||
return(Status);
|
||||
}
|
||||
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
|
||||
Status = ObReferenceObjectByHandle(SectionHandle,
|
||||
SECTION_MAP_READ,
|
||||
|
@ -3911,7 +3911,7 @@ MmUnmapViewOfSection(PEPROCESS Process,
|
|||
|
||||
ASSERT(Process);
|
||||
|
||||
AddressSpace = &((PROS_EPROCESS)Process)->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)Process)->VadRoot;
|
||||
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace,
|
||||
|
@ -4432,7 +4432,7 @@ MmMapViewOfSection(IN PVOID SectionObject,
|
|||
|
||||
|
||||
Section = (PROS_SECTION_OBJECT)SectionObject;
|
||||
AddressSpace = &((PROS_EPROCESS)Process)->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)Process)->VadRoot;
|
||||
|
||||
AllocationType |= (Section->AllocationAttributes & SEC_NO_CHANGE);
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ MiQueryVirtualMemory (IN HANDLE ProcessHandle,
|
|||
DPRINT("NtQueryVirtualMemory() = %x\n",Status);
|
||||
return(Status);
|
||||
}
|
||||
AddressSpace = &Process->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&Process->VadRoot;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -393,7 +393,7 @@ MiProtectVirtualMemory(IN PEPROCESS Process,
|
|||
PAGE_ROUND_DOWN(*BaseAddress);
|
||||
*BaseAddress = (PVOID)PAGE_ROUND_DOWN(*BaseAddress);
|
||||
|
||||
AddressSpace = &((PROS_EPROCESS)Process)->AddressSpace;
|
||||
AddressSpace = (PMADDRESS_SPACE)&((PROS_EPROCESS)Process)->VadRoot;
|
||||
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, *BaseAddress);
|
||||
|
|
|
@ -255,7 +255,7 @@ PsInitProcessManagment(VOID)
|
|||
PspInheritQuota(PsInitialSystemProcess, NULL);
|
||||
|
||||
MmInitializeAddressSpace((PROS_EPROCESS)PsInitialSystemProcess,
|
||||
&((PROS_EPROCESS)PsInitialSystemProcess)->AddressSpace);
|
||||
(PMADDRESS_SPACE)&((PROS_EPROCESS)PsInitialSystemProcess)->VadRoot);
|
||||
|
||||
((PROS_EPROCESS)PsInitialSystemProcess)->LockEvent =
|
||||
ExAllocatePoolWithTag(PagedPool, sizeof(KEVENT), TAG('P', 's', 'L', 'k'));
|
||||
|
|
Loading…
Reference in a new issue