POBJECT_TYPE MmSectionObjectType = NULL;
+BOOLEAN MmAllocationFragment;
+
ULONG_PTR MmSubsectionBase;
static GENERIC_MAPPING MmpSectionMapping = {
PMM_REGION Region;
BOOLEAN HasSwapEntry;
PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace);
- KIRQL OldIrql;
/*
* There is a window between taking the page fault and locking the
*/
if (MmIsPagePresent(Process, Address))
{
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(MmGetPfnForProcess(Process, Address));
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
return(STATUS_SUCCESS);
}
}
MmInsertRmap(Page, Process, (PVOID)PAddress);
}
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
MmUnlockSectionSegment(Segment);
PageOp->Status = STATUS_SUCCESS;
MmspCompleteAndReleasePageOp(PageOp);
/*
* Finish the operation
*/
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
PageOp->Status = STATUS_SUCCESS;
MmspCompleteAndReleasePageOp(PageOp);
DPRINT("Address 0x%.8X\n", Address);
KeBugCheck(MEMORY_MANAGEMENT);
return(Status);
}
- /*
- * Don't add an rmap entry since the page mapped could be for
- * anything.
- */
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
/*
* Cleanup and release locks
return(Status);
}
MmInsertRmap(Page, Process, (PVOID)PAddress);
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
/*
* Cleanup and release locks
}
MmInsertRmap(Page, Process, (PVOID)PAddress);
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
PageOp->Status = STATUS_SUCCESS;
MmspCompleteAndReleasePageOp(PageOp);
DPRINT("Address 0x%.8X\n", Address);
KeBugCheck(MEMORY_MANAGEMENT);
}
MmInsertRmap(Page, Process, (PVOID)PAddress);
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
PageOp->Status = STATUS_SUCCESS;
MmspCompleteAndReleasePageOp(PageOp);
DPRINT("Address 0x%.8X\n", Address);
KeBugCheck(MEMORY_MANAGEMENT);
}
MmInsertRmap(Page, Process, (PVOID)PAddress);
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
PageOp->Status = STATUS_SUCCESS;
MmspCompleteAndReleasePageOp(PageOp);
DPRINT("Address 0x%.8X\n", Address);
PMM_REGION Region;
ULONG Entry;
PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace);
- KIRQL OldIrql;
DPRINT("MmAccessFaultSectionView(%x, %x, %x, %x)\n", AddressSpace, MemoryArea, Address, Locked);
DPRINT1("Unable to create virtual mapping\n");
KeBugCheck(MEMORY_MANAGEMENT);
}
- if (Locked)
- {
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
- MmLockPage(NewPage);
- MmUnlockPage(OldPage);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
- }
/*
* Unshare the old page.
return STATUS_NOT_IMPLEMENTED;
}
-
-/**********************************************************************
- * NAME INTERNAL
- * MmAllocateSection@4
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- * Length
- *
- * RETURN VALUE
- *
- * NOTE
- * Code taken from ntoskrnl/mm/special.c.
- *
- * REVISIONS
- */
-PVOID NTAPI
-MmAllocateSection (IN ULONG Length, PVOID BaseAddress)
-{
- PVOID Result;
- MEMORY_AREA* marea;
- NTSTATUS Status;
- PMMSUPPORT AddressSpace;
- PHYSICAL_ADDRESS BoundaryAddressMultiple;
-
- DPRINT("MmAllocateSection(Length %x)\n",Length);
-
- BoundaryAddressMultiple.QuadPart = 0;
-
- AddressSpace = MmGetKernelAddressSpace();
- Result = BaseAddress;
- MmLockAddressSpace(AddressSpace);
- Status = MmCreateMemoryArea (AddressSpace,
- MEMORY_AREA_SYSTEM,
- &Result,
- Length,
- 0,
- &marea,
- FALSE,
- 0,
- BoundaryAddressMultiple);
- MmUnlockAddressSpace(AddressSpace);
-
- if (!NT_SUCCESS(Status))
- {
- return (NULL);
- }
- DPRINT("Result %p\n",Result);
-
- /* Create a virtual mapping for this memory area */
- MmMapMemoryArea(Result, Length, MC_NPPOOL, PAGE_READWRITE);
-
- return ((PVOID)Result);
-}
-
-
/**********************************************************************
* NAME EXPORTED
* MmMapViewOfSection