-#ifndef __INCLUDE_INTERNAL_MM_H
-#define __INCLUDE_INTERNAL_MM_H
+#pragma once
#include <internal/arch/mm.h>
extern ULONG MmHighestPhysicalPage;
extern ULONG MmAvailablePages;
extern ULONG MmResidentAvailablePages;
-extern ULONG MmNumberOfSystemPtes;
extern PVOID MmPagedPoolBase;
extern ULONG MmPagedPoolSize;
extern SIZE_T MmPeakCommitment;
extern SIZE_T MmtotalCommitLimitMaximum;
-extern PVOID MiDebugMapping;
-extern PMMPTE MmDebugPte;
+extern BOOLEAN MiDbgReadyForPhysical;
struct _KTRAP_FRAME;
struct _EPROCESS;
struct _MM_RMAP_ENTRY;
struct _MM_PAGEOP;
typedef ULONG SWAPENTRY;
+typedef ULONG PFN_TYPE, *PPFN_TYPE;
//
// MmDbgCopyMemory Flags
/* Number of list heads to use */
#define MI_FREE_POOL_LISTS 4
-#define MI_HYPERSPACE_PTES (256 - 1)
-#define MI_ZERO_PTES (32)
-#define MI_MAPPING_RANGE_START (ULONG_PTR)HYPER_SPACE
-#define MI_MAPPING_RANGE_END (MI_MAPPING_RANGE_START + \
- MI_HYPERSPACE_PTES * PAGE_SIZE)
-#define MI_ZERO_PTE (PMMPTE)(MI_MAPPING_RANGE_END + \
- PAGE_SIZE)
/* Signature of free pool blocks */
#define MM_FREE_POOL_TAG 'lprF'
-#define PAGE_TO_SECTION_PAGE_DIRECTORY_OFFSET(x) \
- ((x) / (4*1024*1024))
-
-#define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
- ((((x)) % (4*1024*1024)) / (4*1024))
-
-#define NR_SECTION_PAGE_TABLES 1024
-#define NR_SECTION_PAGE_ENTRIES 1024
-
-#define TEB_BASE 0x7FFDE000
-
/* Although Microsoft says this isn't hardcoded anymore,
they won't be able to change it. Stuff depends on it */
#define MM_VIRTMEM_GRANULARITY (64 * 1024)
*/
#define MM_POOL_ALIGNMENT 8
-/*
- * Maximum size of the kmalloc area (this is totally arbitary)
- */
-#define MM_KERNEL_MAP_SIZE (16*1024*1024)
-#define MM_KERNEL_MAP_BASE (0xf0c00000)
-
-/*
- * FIXME - different architectures have different cache line sizes...
- */
-#define MM_CACHE_LINE_SIZE 32
-
#define MM_ROUND_UP(x,s) \
((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
USHORT ShortFlags;
} e2;
} u3;
-#ifdef _WIN64
- ULONG UsedPageTableEntries;
-#endif
union
{
MMPTE OriginalPte;
ULONG_PTR EntireFrame; // SavedSwapEntry
struct
{
- ULONG_PTR PteFrame: 8*sizeof(PVOID)-7;
+ ULONG_PTR PteFrame:25;
ULONG_PTR InPageError:1;
ULONG_PTR VerifierAllocation:1;
ULONG_PTR AweAllocation:1;
PVOID Context,
PMEMORY_AREA MemoryArea,
PVOID Address,
- PFN_NUMBER Page,
+ PFN_TYPE Page,
SWAPENTRY SwapEntry,
BOOLEAN Dirty
);
NTAPI
MmBuildMdlFromPages(
PMDL Mdl,
- PPFN_NUMBER Pages
+ PULONG Pages
);
/* mminit.c ******************************************************************/
NTAPI
MmReadFromSwapPage(
SWAPENTRY SwapEntry,
- PFN_NUMBER Page
+ PFN_TYPE Page
);
BOOLEAN
NTAPI
MmWriteToSwapPage(
SWAPENTRY SwapEntry,
- PFN_NUMBER Page
+ PFN_TYPE Page
);
NTSTATUS
PMEMORY_AREA MemoryArea,
PVOID Address,
PMEMORY_BASIC_INFORMATION Info,
- PSIZE_T ResultLength
+ PULONG ResultLength
);
VOID
PVOID
NTAPI
-ExAllocatePageWithPhysPage(PFN_NUMBER Page);
+ExAllocatePageWithPhysPage(PFN_TYPE Page);
NTSTATUS
NTAPI
MiCopyFromUserPage(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
PVOID SourceAddress
);
NTSTATUS
NTAPI
-MiZeroPage(PFN_NUMBER Page);
+MiZeroPage(PFN_TYPE Page);
/* memsafe.s *****************************************************************/
NTAPI
MmReleasePageMemoryConsumer(
ULONG Consumer,
- PFN_NUMBER Page
+ PFN_TYPE Page
);
NTSTATUS
MmRequestPageMemoryConsumer(
ULONG Consumer,
BOOLEAN MyWait,
- PPFN_NUMBER AllocatedPage
+ PPFN_TYPE AllocatedPage
);
VOID
VOID
NTAPI
MmSetRmapListHeadPage(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
struct _MM_RMAP_ENTRY* ListHead
);
struct _MM_RMAP_ENTRY*
NTAPI
-MmGetRmapListHeadPage(PFN_NUMBER Page);
+MmGetRmapListHeadPage(PFN_TYPE Page);
VOID
NTAPI
MmInsertRmap(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
struct _EPROCESS *Process,
PVOID Address
);
VOID
NTAPI
MmDeleteAllRmaps(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
PVOID Context,
VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
);
VOID
NTAPI
MmDeleteRmap(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
struct _EPROCESS *Process,
PVOID Address
);
VOID
NTAPI
-MmSetCleanAllRmaps(PFN_NUMBER Page);
+MmSetCleanAllRmaps(PFN_TYPE Page);
VOID
NTAPI
-MmSetDirtyAllRmaps(PFN_NUMBER Page);
+MmSetDirtyAllRmaps(PFN_TYPE Page);
BOOLEAN
NTAPI
-MmIsDirtyPageRmap(PFN_NUMBER Page);
+MmIsDirtyPageRmap(PFN_TYPE Page);
NTSTATUS
NTAPI
-MmWritePagePhysicalAddress(PFN_NUMBER Page);
+MmWritePagePhysicalAddress(PFN_TYPE Page);
NTSTATUS
NTAPI
-MmPageOutPhysicalAddress(PFN_NUMBER Page);
+MmPageOutPhysicalAddress(PFN_TYPE Page);
/* freelist.c **********************************************************/
-#define ASSERT_PFN(x) ASSERT((x)->u3.e1.CacheAttribute != 0)
-
FORCEINLINE
PMMPFN
-MiGetPfnEntry(IN PFN_NUMBER Pfn)
+MiGetPfnEntry(IN PFN_TYPE Pfn)
{
PMMPFN Page;
extern RTL_BITMAP MiPfnBitMap;
/* Get the entry */
Page = &MmPfnDatabase[Pfn];
- /* Make sure it's valid */
- ASSERT_PFN(Page);
-
/* Return it */
return Page;
};
return Pfn1 - MmPfnDatabase;
}
-PFN_NUMBER
+PFN_TYPE
NTAPI
-MmGetLRUNextUserPage(PFN_NUMBER PreviousPage);
+MmGetLRUNextUserPage(PFN_TYPE PreviousPage);
-PFN_NUMBER
+PFN_TYPE
NTAPI
MmGetLRUFirstUserPage(VOID);
VOID
NTAPI
-MmInsertLRULastUserPage(PFN_NUMBER Page);
+MmInsertLRULastUserPage(PFN_TYPE Page);
VOID
NTAPI
-MmRemoveLRUUserPage(PFN_NUMBER Page);
+MmRemoveLRUUserPage(PFN_TYPE Page);
VOID
NTAPI
-MmLockPage(PFN_NUMBER Page);
+MmLockPage(PFN_TYPE Page);
VOID
NTAPI
-MmUnlockPage(PFN_NUMBER Page);
+MmUnlockPage(PFN_TYPE Page);
ULONG
NTAPI
-MmGetLockCountPage(PFN_NUMBER Page);
+MmGetLockCountPage(PFN_TYPE Page);
VOID
NTAPI
VOID
);
-PFN_NUMBER
+PFN_TYPE
NTAPI
MmGetContinuousPages(
ULONG NumberOfBytes,
PVOID
NTAPI
-MiMapPagesToZeroInHyperSpace(IN PFN_NUMBER *Pages,
+MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages,
IN PFN_NUMBER NumberOfPages);
VOID
PVOID
MiMapPageToZeroInHyperSpace(IN PFN_NUMBER Page)
{
- return MiMapPagesToZeroInHyperSpace(&Page, 1);
+ PMMPFN Pfn1 = MiGetPfnEntry(Page);
+ return MiMapPagesToZeroInHyperSpace(&Pfn1, 1);
}
#define MmDeleteHyperspaceMapping(x) MiUnmapPageInHyperSpace(HyperProcess, x, HyperIrql);
MmCreateVirtualMappingForKernel(
PVOID Address,
ULONG flProtect,
- PPFN_NUMBER Pages,
+ PPFN_TYPE Pages,
ULONG PageCount
);
struct _EPROCESS* Process,
PVOID Address,
ULONG flProtect,
- PPFN_NUMBER Pages,
+ PPFN_TYPE Pages,
ULONG PageCount
);
struct _EPROCESS* Process,
PVOID Address,
ULONG flProtect,
- PPFN_NUMBER Pages,
+ PPFN_TYPE Pages,
ULONG PageCount
);
struct _EPROCESS *Process,
PVOID Address,
BOOLEAN* WasDirty,
- PPFN_NUMBER Page
+ PPFN_TYPE Page
);
VOID
VOID
NTAPI
MmTransferOwnershipPage(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
ULONG NewConsumer
);
PVOID Address
);
-PFN_NUMBER
+PFN_TYPE
NTAPI
MmAllocPage(
- ULONG Consumer,
- SWAPENTRY SavedSwapEntry
+ ULONG Consumer
);
LONG
PHYSICAL_ADDRESS LowestAddress,
PHYSICAL_ADDRESS HighestAddress,
ULONG NumberOfPages,
- PPFN_NUMBER Pages
+ PPFN_TYPE Pages
);
VOID
NTAPI
-MmDereferencePage(PFN_NUMBER Page);
+MmDereferencePage(PFN_TYPE Page);
VOID
NTAPI
-MmReferencePage(PFN_NUMBER Page);
+MmReferencePage(PFN_TYPE Page);
ULONG
NTAPI
-MmGetReferenceCountPage(PFN_NUMBER Page);
+MmGetReferenceCountPage(PFN_TYPE Page);
BOOLEAN
NTAPI
-MmIsPageInUse(PFN_NUMBER Page);
+MmIsPageInUse(PFN_TYPE Page);
VOID
NTAPI
MmSetSavedSwapEntryPage(
- PFN_NUMBER Page,
+ PFN_TYPE Page,
SWAPENTRY SavedSwapEntry);
SWAPENTRY
NTAPI
-MmGetSavedSwapEntryPage(PFN_NUMBER Page);
+MmGetSavedSwapEntryPage(PFN_TYPE Page);
VOID
NTAPI
PVOID Address
);
-PFN_NUMBER
+PFN_TYPE
NTAPI
MmGetPfnForProcess(
struct _EPROCESS *Process,
MmCreateProcessAddressSpace(
IN ULONG MinWs,
IN PEPROCESS Dest,
- IN PULONG_PTR DirectoryTableBase
+ IN PULONG DirectoryTableBase
);
NTSTATUS
NTAPI
MmInitializeHandBuiltProcess(
IN PEPROCESS Process,
- IN PULONG_PTR DirectoryTableBase
+ IN PULONG DirectoryTableBase
);
PVOID Address,
BOOLEAN FreePage,
BOOLEAN* WasDirty,
- PPFN_NUMBER Page
+ PPFN_TYPE Page
);
BOOLEAN
VOID
NTAPI
-MmMarkPageMapped(PFN_NUMBER Page);
+MmMarkPageMapped(PFN_TYPE Page);
VOID
NTAPI
-MmMarkPageUnmapped(PFN_NUMBER Page);
+MmMarkPageUnmapped(PFN_TYPE Page);
VOID
NTAPI
PMEMORY_AREA MemoryArea,
PVOID Address,
PMEMORY_BASIC_INFORMATION Info,
- PSIZE_T ResultLength
+ PULONG ResultLength
);
NTSTATUS
IN PVOID Address,
IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
OUT PVOID VirtualMemoryInformation,
- IN SIZE_T Length,
- OUT PSIZE_T ResultLength
+ IN ULONG Length,
+ OUT PULONG ResultLength
);
/* sysldr.c ******************************************************************/
{
return MmKernelAddressSpace;
}
-
-#endif