// Convert a PTE into a corresponding address
//
#define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10))
-#define MiPdeToAddress(PDE) ((PVOID)((ULONG)(PDE) << 10))
+#define MiPdeToAddress(PDE) ((PVOID)((ULONG)(PDE) << 20))
+#define MiPdeToPte(PDE) ((PMMPTE)MiPteToAddress(PDE))
+#define MiPteToPde(PTE) ((PMMPDE)MiAddressToPte(PTE))
-#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE))
-#define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE)))
-#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE)
+#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE))
+#define ADDR_TO_PDE_OFFSET(v) (((ULONG)(v)) / (1024 * PAGE_SIZE))
+#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE)
#define MiGetPdeOffset ADDR_TO_PDE_OFFSET
// Get the first PTE in expansion space
//
PointerPde = MmPagedPoolInfo.NextPdeForPagedPoolExpansion;
- BaseVa = MiPdeToAddress(PointerPde);
+ BaseVa = MiPdeToPte(PointerPde);
BaseVaStart = BaseVa;
//
if (!PointerPde->u.Long)
{
/* No address in this range used yet, move to the next PDE range */
- *NextVa = MiPteToAddress(MiPdeToAddress(PointerPde + 1));
+ *NextVa = MiPdeToAddress(PointerPde + 1);
break;
}
if (!PointerPde->u.Hard.Valid)
{
/* It isn't, go ahead and do the fault */
- LockChange = MiMakeSystemAddressValid(MiPdeToAddress(PointerPde),
+ LockChange = MiMakeSystemAddressValid(MiPdeToPte(PointerPde),
TargetProcess);
}