From 7afb3ea904f9cb3d787526f0b73fa13b76e5f9f6 Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Sun, 21 Jun 2009 04:28:31 +0000 Subject: [PATCH] - Add another helper: MiGetPfnEntryIndex. This returns the page frame number (PFN) for a given MMPFN entry. - Also add MiPteToAddress to complement MiAddressToPte. This returns the VA for a given PTE. Bonus points if you can figure out the bit magic. svn path=/trunk/; revision=41507 --- reactos/ntoskrnl/include/internal/i386/mm.h | 5 +++++ reactos/ntoskrnl/include/internal/mm.h | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 67a4ddff817..2846b6993d5 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -23,6 +23,11 @@ PULONG MmGetPageDirectory(VOID); #define MiAddressToPteOffset(x) \ ((((ULONG)(x)) << 10) >> 22) +// +// Convert a PTE into a corresponding address +// +#define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10)) + #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) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index c74624c76ea..ac776199304 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1050,6 +1050,16 @@ MiGetPfnEntry(IN PFN_TYPE Pfn) return Page; }; +FORCEINLINE +PFN_NUMBER +MiGetPfnEntryIndex(IN PMMPFN Pfn1) +{ + // + // This will return the Page Frame Number (PFN) from the MMPFN + // + return Pfn1 - MmPfnDatabase; +} + PFN_TYPE NTAPI MmGetLRUNextUserPage(PFN_TYPE PreviousPage);