OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
ASSERT(PointerPte->u.Hard.Valid == 0);
- //
- // Get a page
- //
- PageFrameNumber = MmAllocPage(MC_PPOOL);
- DPRINT("New pool page: %lx\n", PageFrameNumber);
+ /* Get a page */
+ PageFrameNumber = MiRemoveAnyPage(0);
+ DPRINT1("New pool page: %lx\n", PageFrameNumber);
+
+ /* Initialize it */
+ MiInitializePfn(PageFrameNumber, PointerPte, TRUE);
//
// Release PFN lock
/* Shouldn't see faults for user PTEs yet */
ASSERT(PointerPte > MiHighestUserPte);
- //
- // Build the PTE
- //
- TempPte = ValidKernelPte;
- TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
+ /* Build the PTE */
+ MI_MAKE_HARDWARE_PTE(&TempPte, PointerPte, PointerPte->u.Soft.Protection, PageFrameNumber);
ASSERT(TempPte.u.Hard.Valid == 1);
ASSERT(PointerPte->u.Hard.Valid == 0);
*PointerPte = TempPte;
//
// It's all good now
//
- DPRINT("Paged pool page has now been paged in\n");
+ DPRINT1("Paged pool page has now been paged in\n");
return STATUS_PAGE_FAULT_DEMAND_ZERO;
}
//
KeFlushEntireTb(TRUE, TRUE);
- //
- // Setup a demand-zero writable PTE
- //
- TempPte.u.Long = 0;
- MI_MAKE_WRITE_PAGE(&TempPte);
+ /* Setup a demand-zero writable PTE */
+ DPRINT1("Setting up demand zero\n");
+ MI_MAKE_SOFTWARE_PTE(&TempPte, MM_READWRITE);
//
// Find the first and last PTE, then loop them all