ReactOS 0.4.17-dev-1343-g8fe3cee
mm.h File Reference

Go to the source code of this file.

Macros

#define _MI_PAGING_LEVELS   4
 
#define _MI_HAS_NO_EXECUTE   1
 
#define MI_USER_PROBE_ADDRESS   (PVOID)0x000007FFFFFF0000ULL
 
#define MI_DEFAULT_SYSTEM_RANGE_START   (PVOID)0xFFFF080000000000ULL
 
#define MI_REAL_SYSTEM_RANGE_START   0xFFFF800000000000ULL
 
#define HYPER_SPACE   0xFFFFF70000000000ULL
 
#define HYPER_SPACE_END   0xFFFFF77FFFFFFFFFULL
 
#define MI_SYSTEM_CACHE_WS_START   0xFFFFF78000001000ULL
 
#define MM_SYSTEM_SPACE_START   0xFFFFF88000000000ULL
 
#define MI_DEBUG_MAPPING   (PVOID)0xFFFFF89FFFFFF000ULL
 
#define MI_PAGED_POOL_START   (PVOID)0xFFFFF8A000000000ULL
 
#define MI_SESSION_SPACE_END   0xFFFFF98000000000ULL
 
#define MI_SYSTEM_CACHE_START   0xFFFFF98000000000ULL
 
#define MI_SYSTEM_CACHE_END   0xFFFFFA7FFFFFFFFFULL
 
#define MI_PFN_DATABASE   0xFFFFFA8000000000ULL
 
#define MI_NONPAGED_POOL_END   (PVOID)0xFFFFFFFFFFBFFFFFULL
 
#define MI_HIGHEST_SYSTEM_ADDRESS   (PVOID)0xFFFFFFFFFFFFFFFFULL
 
#define MmSystemRangeStart   ((PVOID)MI_REAL_SYSTEM_RANGE_START)
 
#define MM_HIGHEST_USER_ADDRESS_WOW64   0x7FFEFFFF
 
#define MM_SYSTEM_RANGE_START_WOW64   0x80000000
 
#define PDE_MAPPED_VA   (PTE_PER_PAGE * PAGE_SIZE)
 
#define MI_SYSTEM_PTE_BASE   (PVOID)MiAddressToPte(KSEG0_BASE)
 
#define MM_HIGHEST_VAD_ADDRESS   (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE))
 
#define MI_MAPPING_RANGE_START   HYPER_SPACE
 
#define MI_MAPPING_RANGE_END   (MI_MAPPING_RANGE_START + MI_HYPERSPACE_PTES * PAGE_SIZE)
 
#define MI_DUMMY_PTE   (MI_MAPPING_RANGE_END + PAGE_SIZE)
 
#define MI_VAD_BITMAP   (MI_DUMMY_PTE + PAGE_SIZE)
 
#define MI_WORKING_SET_LIST   (MI_VAD_BITMAP + PAGE_SIZE)
 
#define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING   ((255 * _1MB) >> PAGE_SHIFT)
 
#define MI_MIN_PAGES_FOR_SYSPTE_TUNING   ((19 * _1MB) >> PAGE_SHIFT)
 
#define MI_MIN_PAGES_FOR_SYSPTE_BOOST   ((32 * _1MB) >> PAGE_SHIFT)
 
#define MI_MIN_PAGES_FOR_SYSPTE_BOOST_BOOST   ((256 * _1MB) >> PAGE_SHIFT)
 
#define MI_MIN_INIT_PAGED_POOLSIZE   (32 * _1MB)
 
#define MI_MAX_INIT_NONPAGED_POOL_SIZE   (128ULL * 1024 * 1024 * 1024)
 
#define MI_MAX_NONPAGED_POOL_SIZE   (128ULL * 1024 * 1024 * 1024)
 
#define MI_SYSTEM_VIEW_SIZE   (512 * _1MB)
 
#define MI_SESSION_VIEW_SIZE   (512 * _1MB)
 
#define MI_SESSION_POOL_SIZE   (64 * _1MB)
 
#define MI_SESSION_IMAGE_SIZE   (16 * _1MB)
 
#define MI_SESSION_WORKING_SET_SIZE   (16 * _1MB)
 
#define MI_SESSION_SIZE
 
#define MI_MIN_ALLOCATION_FRAGMENT   (4 * _1KB)
 
#define MI_ALLOCATION_FRAGMENT   (64 * _1KB)
 
#define MI_MAX_ALLOCATION_FRAGMENT   (2 * _1MB)
 
#define MM_PTE_SOFTWARE_PROTECTION_BITS   5
 
#define MI_MIN_SECONDARY_COLORS   8
 
#define MI_SECONDARY_COLORS   64
 
#define MI_MAX_SECONDARY_COLORS   1024
 
#define MI_NUMBER_SYSTEM_PTES   (22000 * 22)
 
#define MI_MAX_FREE_PAGE_LISTS   4
 
#define MI_HYPERSPACE_PTES   (256 - 1)
 
#define MI_ZERO_PTES   (32)
 
#define MI_MAX_ZERO_BITS   53
 
#define SESSION_POOL_LOOKASIDES   21
 
#define MM_EMPTY_PTE_LIST   ((ULONG64)0xFFFFFFFF)
 
#define MM_EMPTY_LIST   ((ULONG_PTR)-1)
 
#define MI_CACHE_TYPE_CACHED   0
 
#define MI_CACHE_TYPE_WRITE_COMBINED   1
 
#define MI_CACHE_TYPE_DEVICE   3
 
#define PFN_FROM_PTE(v)   ((v)->u.Hard.PageFrameNumber)
 
#define PFN_FROM_PDE(v)   ((v)->u.Hard.PageFrameNumber)
 
#define PFN_FROM_PPE(v)   ((v)->u.Hard.PageFrameNumber)
 
#define PFN_FROM_PXE(v)   ((v)->u.Hard.PageFrameNumber)
 
#define MI_MAKE_DIRTY_PAGE(x)   ((x)->u.Hard.NotDirty = ((x)->u.Hard.Writable == 0))
 
#define MI_MAKE_CLEAN_PAGE(x)   ((x)->u.Hard.NotDirty = 1)
 
#define MI_MAKE_ACCESSED_PAGE(x)   ((x)->u.Hard.Accessed = 1)
 
#define MI_IS_PAGE_LARGE(x)   ((x)->u.Hard.NotLargePage == 0)
 
#define MI_IS_PAGE_WRITEABLE(x)   ((x)->u.Hard.Writable == 1)
 
#define MI_IS_PAGE_COPY_ON_WRITE(x)   ((x)->u.Hard.CopyOnWrite == 1)
 
#define MI_IS_PAGE_EXECUTABLE(x)    (((x)->u.Hard.Owner ? (x)->u.Hard.UserNoExecute : (x)->u.Hard.PrivilegedNoExecute) == 0)
 
#define MI_IS_PAGE_DIRTY(x)   ((x)->u.Hard.NotDirty == 0)
 
#define MI_MAKE_WRITE_PAGE(x)   ((x)->u.Hard.Writable = 1)
 
#define MI_MAKE_READ_ONLY_PAGE(x)   ((x)->u.Hard.Writable = 0, (x)->u.Hard.NotDirty = 1)
 
#define MI_MAKE_EXECUTABLE_PAGE(x)   ((x)->u.Hard.PrivilegedNoExecute = 0, (x)->u.Hard.UserNoExecute = 0)
 
#define MI_MAKE_NO_EXECUTE_PAGE(x)   ((x)->u.Hard.PrivilegedNoExecute = 1, (x)->u.Hard.UserNoExecute = 1)
 
#define MI_IS_PAGE_GLOBAL(x)   ((x)->u.Hard.NonGlobal == 0)
 
#define MI_MAKE_OWNER_PAGE(x)
 
#define MI_MAKE_PTE_CACHED(Pte)   ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_CACHED)
 
#define MI_MAKE_PTE_NON_CACHED(Pte)   ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_DEVICE)
 
#define MI_MAKE_PTE_WRITE_COMBINE(Pte)   ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_WRITE_COMBINED)
 
#define MI_IS_NOT_PRESENT_FAULT(FaultCode)   !BooleanFlagOn(FaultCode, 0x00000001)
 
#define MI_IS_WRITE_ACCESS(FaultCode)   BooleanFlagOn(FaultCode, 0x00000002)
 
#define MI_IS_INSTRUCTION_FETCH(FaultCode)   BooleanFlagOn(FaultCode, 0x00000010)
 
#define MI_WRITE_VALID_PPE   MI_WRITE_VALID_PTE
 
#define ValidKernelPpe   ValidKernelPde
 
#define MI_VA_LEVEL_SHIFT(Level)   (PTI_SHIFT + 9 * (Level))
 
#define MI_VA_SIGNIFICANT_BITS   48
 
#define MiAddressToPte(x)   MiArm64AddressToEntry((PVOID)(x), 0, PTE_BASE)
 
#define MiAddressToPde(x)   MiArm64AddressToEntry((PVOID)(x), 1, PDE_BASE)
 
#define MiAddressToPpe(x)   MiArm64AddressToEntry((PVOID)(x), 2, PPE_BASE)
 
#define MiAddressToPxe(x)   MiArm64AddressToEntry((PVOID)(x), 3, PXE_BASE)
 
#define MiAddressToPteOffset(x)   MiAddressToPti(x)
 
#define MiAddressToPdeOffset(x)   MiAddressToPdi(x)
 
#define MiGetPdeOffset(x)   MiAddressToPdi(x)
 
#define MiPteToAddress(x)   MiArm64EntryToAddress((x), 0)
 
#define MiPdeToAddress(x)   MiArm64EntryToAddress((x), 1)
 
#define MiPpeToAddress(x)   MiArm64EntryToAddress((x), 2)
 
#define MiPxeToAddress(x)   MiArm64EntryToAddress((x), 3)
 
#define MiPdeToPte(x)   ((PMMPTE)MiPteToAddress(x))
 
#define MiPpeToPte(x)   ((PMMPTE)MiPdeToAddress(x))
 
#define MiPxeToPte(x)   ((PMMPTE)MiPpeToAddress(x))
 
#define MiPteToPde(x)   ((PMMPDE)MiAddressToPte(x))
 
#define MiPteToPpe(x)   ((PMMPPE)MiAddressToPde(x))
 
#define MiPteToPxe(x)   ((PMMPXE)MiAddressToPpe(x))
 
#define MiPdeToPpe(x)   ((PMMPPE)MiAddressToPte(x))
 
#define MiPdeToPxe(x)   ((PMMPXE)MiAddressToPde(x))
 
#define MiIsPteOnPdeBoundary(PointerPte)    ((((ULONG_PTR)(PointerPte)) & (PAGE_SIZE - 1)) == 0)
 
#define MiIsPteOnPpeBoundary(PointerPte)    ((((ULONG_PTR)(PointerPte)) & (PDE_PER_PAGE * PAGE_SIZE - 1)) == 0)
 
#define MiIsPteOnPxeBoundary(PointerPte)    ((((ULONG_PTR)(PointerPte)) & (PPE_PER_PAGE * PDE_PER_PAGE * PAGE_SIZE - 1)) == 0)
 
#define MiProtoPteToPte(x)    (PMMPTE)(((LONG64)(x)->u.Long) >> 16)
 
#define MiSubsectionPteToSubsection(x)    (PMMPTE)((LONG64)(x)->u.Subsect.SubsectionAddress)
 

Functions

FORCEINLINE PMMPTE MiArm64AddressToEntry (_In_ PVOID Address, _In_ ULONG Level, _In_ ULONG_PTR TableBase)
 
FORCEINLINE ULONG MiAddressToPti (_In_ PVOID Address)
 
FORCEINLINE ULONG MiAddressToPdi (_In_ PVOID Address)
 
FORCEINLINE ULONG MiAddressToPxi (_In_ PVOID Address)
 
FORCEINLINE PVOID MiArm64EntryToAddress (_In_ PVOID Entry, _In_ ULONG Level)
 
FORCEINLINE VOID MI_MAKE_SUBSECTION_PTE (_Out_ PMMPTE NewPte, _In_ PVOID Segment)
 
FORCEINLINE VOID MI_MAKE_PROTOTYPE_PTE (_Out_ PMMPTE NewPte, _In_ PMMPTE PointerPte)
 
FORCEINLINE BOOLEAN MI_IS_MAPPED_PTE (_In_ PMMPTE PointerPte)
 
FORCEINLINE BOOLEAN MiIsPdeForAddressValid (_In_ PVOID Address)
 

Macro Definition Documentation

◆ _MI_HAS_NO_EXECUTE

#define _MI_HAS_NO_EXECUTE   1

Definition at line 11 of file mm.h.

◆ _MI_PAGING_LEVELS

#define _MI_PAGING_LEVELS   4

Definition at line 10 of file mm.h.

◆ HYPER_SPACE

#define HYPER_SPACE   0xFFFFF70000000000ULL

Definition at line 17 of file mm.h.

◆ HYPER_SPACE_END

#define HYPER_SPACE_END   0xFFFFF77FFFFFFFFFULL

Definition at line 18 of file mm.h.

◆ MI_ALLOCATION_FRAGMENT

#define MI_ALLOCATION_FRAGMENT   (64 * _1KB)

Definition at line 65 of file mm.h.

◆ MI_CACHE_TYPE_CACHED

#define MI_CACHE_TYPE_CACHED   0

Definition at line 85 of file mm.h.

◆ MI_CACHE_TYPE_DEVICE

#define MI_CACHE_TYPE_DEVICE   3

Definition at line 87 of file mm.h.

◆ MI_CACHE_TYPE_WRITE_COMBINED

#define MI_CACHE_TYPE_WRITE_COMBINED   1

Definition at line 86 of file mm.h.

◆ MI_DEBUG_MAPPING

#define MI_DEBUG_MAPPING   (PVOID)0xFFFFF89FFFFFF000ULL

Definition at line 21 of file mm.h.

◆ MI_DEFAULT_SYSTEM_RANGE_START

#define MI_DEFAULT_SYSTEM_RANGE_START   (PVOID)0xFFFF080000000000ULL

Definition at line 15 of file mm.h.

◆ MI_DUMMY_PTE

#define MI_DUMMY_PTE   (MI_MAPPING_RANGE_END + PAGE_SIZE)

Definition at line 43 of file mm.h.

◆ MI_HIGHEST_SYSTEM_ADDRESS

#define MI_HIGHEST_SYSTEM_ADDRESS   (PVOID)0xFFFFFFFFFFFFFFFFULL

Definition at line 28 of file mm.h.

◆ MI_HYPERSPACE_PTES

#define MI_HYPERSPACE_PTES   (256 - 1)

Definition at line 75 of file mm.h.

◆ MI_IS_INSTRUCTION_FETCH

#define MI_IS_INSTRUCTION_FETCH (   FaultCode)    BooleanFlagOn(FaultCode, 0x00000010)

Definition at line 127 of file mm.h.

◆ MI_IS_NOT_PRESENT_FAULT

#define MI_IS_NOT_PRESENT_FAULT (   FaultCode)    !BooleanFlagOn(FaultCode, 0x00000001)

Definition at line 125 of file mm.h.

◆ MI_IS_PAGE_COPY_ON_WRITE

#define MI_IS_PAGE_COPY_ON_WRITE (   x)    ((x)->u.Hard.CopyOnWrite == 1)

Definition at line 104 of file mm.h.

◆ MI_IS_PAGE_DIRTY

#define MI_IS_PAGE_DIRTY (   x)    ((x)->u.Hard.NotDirty == 0)

Definition at line 107 of file mm.h.

◆ MI_IS_PAGE_EXECUTABLE

#define MI_IS_PAGE_EXECUTABLE (   x)     (((x)->u.Hard.Owner ? (x)->u.Hard.UserNoExecute : (x)->u.Hard.PrivilegedNoExecute) == 0)

Definition at line 105 of file mm.h.

◆ MI_IS_PAGE_GLOBAL

#define MI_IS_PAGE_GLOBAL (   x)    ((x)->u.Hard.NonGlobal == 0)

Definition at line 112 of file mm.h.

◆ MI_IS_PAGE_LARGE

#define MI_IS_PAGE_LARGE (   x)    ((x)->u.Hard.NotLargePage == 0)

Definition at line 102 of file mm.h.

◆ MI_IS_PAGE_WRITEABLE

#define MI_IS_PAGE_WRITEABLE (   x)    ((x)->u.Hard.Writable == 1)

Definition at line 103 of file mm.h.

◆ MI_IS_WRITE_ACCESS

#define MI_IS_WRITE_ACCESS (   FaultCode)    BooleanFlagOn(FaultCode, 0x00000002)

Definition at line 126 of file mm.h.

◆ MI_MAKE_ACCESSED_PAGE

#define MI_MAKE_ACCESSED_PAGE (   x)    ((x)->u.Hard.Accessed = 1)

Definition at line 101 of file mm.h.

◆ MI_MAKE_CLEAN_PAGE

#define MI_MAKE_CLEAN_PAGE (   x)    ((x)->u.Hard.NotDirty = 1)

Definition at line 100 of file mm.h.

◆ MI_MAKE_DIRTY_PAGE

#define MI_MAKE_DIRTY_PAGE (   x)    ((x)->u.Hard.NotDirty = ((x)->u.Hard.Writable == 0))

Definition at line 99 of file mm.h.

◆ MI_MAKE_EXECUTABLE_PAGE

#define MI_MAKE_EXECUTABLE_PAGE (   x)    ((x)->u.Hard.PrivilegedNoExecute = 0, (x)->u.Hard.UserNoExecute = 0)

Definition at line 110 of file mm.h.

◆ MI_MAKE_NO_EXECUTE_PAGE

#define MI_MAKE_NO_EXECUTE_PAGE (   x)    ((x)->u.Hard.PrivilegedNoExecute = 1, (x)->u.Hard.UserNoExecute = 1)

Definition at line 111 of file mm.h.

◆ MI_MAKE_OWNER_PAGE

#define MI_MAKE_OWNER_PAGE (   x)
Value:
((x)->u.Hard.Owner = 1, \
(x)->u.Hard.NonGlobal = 1, \
(x)->u.Hard.PrivilegedNoExecute = 1)
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240

Definition at line 115 of file mm.h.

◆ MI_MAKE_PTE_CACHED

#define MI_MAKE_PTE_CACHED (   Pte)    ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_CACHED)

Definition at line 120 of file mm.h.

◆ MI_MAKE_PTE_NON_CACHED

#define MI_MAKE_PTE_NON_CACHED (   Pte)    ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_DEVICE)

Definition at line 121 of file mm.h.

◆ MI_MAKE_PTE_WRITE_COMBINE

#define MI_MAKE_PTE_WRITE_COMBINE (   Pte)    ((Pte)->u.Hard.CacheType = MI_CACHE_TYPE_WRITE_COMBINED)

Definition at line 122 of file mm.h.

◆ MI_MAKE_READ_ONLY_PAGE

#define MI_MAKE_READ_ONLY_PAGE (   x)    ((x)->u.Hard.Writable = 0, (x)->u.Hard.NotDirty = 1)

Definition at line 109 of file mm.h.

◆ MI_MAKE_WRITE_PAGE

#define MI_MAKE_WRITE_PAGE (   x)    ((x)->u.Hard.Writable = 1)

Definition at line 108 of file mm.h.

◆ MI_MAPPING_RANGE_END

#define MI_MAPPING_RANGE_END   (MI_MAPPING_RANGE_START + MI_HYPERSPACE_PTES * PAGE_SIZE)

Definition at line 42 of file mm.h.

◆ MI_MAPPING_RANGE_START

#define MI_MAPPING_RANGE_START   HYPER_SPACE

Definition at line 41 of file mm.h.

◆ MI_MAX_ALLOCATION_FRAGMENT

#define MI_MAX_ALLOCATION_FRAGMENT   (2 * _1MB)

Definition at line 66 of file mm.h.

◆ MI_MAX_FREE_PAGE_LISTS

#define MI_MAX_FREE_PAGE_LISTS   4

Definition at line 74 of file mm.h.

◆ MI_MAX_INIT_NONPAGED_POOL_SIZE

#define MI_MAX_INIT_NONPAGED_POOL_SIZE   (128ULL * 1024 * 1024 * 1024)

Definition at line 53 of file mm.h.

◆ MI_MAX_NONPAGED_POOL_SIZE

#define MI_MAX_NONPAGED_POOL_SIZE   (128ULL * 1024 * 1024 * 1024)

Definition at line 54 of file mm.h.

◆ MI_MAX_SECONDARY_COLORS

#define MI_MAX_SECONDARY_COLORS   1024

Definition at line 72 of file mm.h.

◆ MI_MAX_ZERO_BITS

#define MI_MAX_ZERO_BITS   53

Definition at line 77 of file mm.h.

◆ MI_MIN_ALLOCATION_FRAGMENT

#define MI_MIN_ALLOCATION_FRAGMENT   (4 * _1KB)

Definition at line 64 of file mm.h.

◆ MI_MIN_INIT_PAGED_POOLSIZE

#define MI_MIN_INIT_PAGED_POOLSIZE   (32 * _1MB)

Definition at line 52 of file mm.h.

◆ MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING

#define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING   ((255 * _1MB) >> PAGE_SHIFT)

Definition at line 48 of file mm.h.

◆ MI_MIN_PAGES_FOR_SYSPTE_BOOST

#define MI_MIN_PAGES_FOR_SYSPTE_BOOST   ((32 * _1MB) >> PAGE_SHIFT)

Definition at line 50 of file mm.h.

◆ MI_MIN_PAGES_FOR_SYSPTE_BOOST_BOOST

#define MI_MIN_PAGES_FOR_SYSPTE_BOOST_BOOST   ((256 * _1MB) >> PAGE_SHIFT)

Definition at line 51 of file mm.h.

◆ MI_MIN_PAGES_FOR_SYSPTE_TUNING

#define MI_MIN_PAGES_FOR_SYSPTE_TUNING   ((19 * _1MB) >> PAGE_SHIFT)

Definition at line 49 of file mm.h.

◆ MI_MIN_SECONDARY_COLORS

#define MI_MIN_SECONDARY_COLORS   8

Definition at line 70 of file mm.h.

◆ MI_NONPAGED_POOL_END

#define MI_NONPAGED_POOL_END   (PVOID)0xFFFFFFFFFFBFFFFFULL

Definition at line 27 of file mm.h.

◆ MI_NUMBER_SYSTEM_PTES

#define MI_NUMBER_SYSTEM_PTES   (22000 * 22)

Definition at line 73 of file mm.h.

◆ MI_PAGED_POOL_START

#define MI_PAGED_POOL_START   (PVOID)0xFFFFF8A000000000ULL

Definition at line 22 of file mm.h.

◆ MI_PFN_DATABASE

#define MI_PFN_DATABASE   0xFFFFFA8000000000ULL

Definition at line 26 of file mm.h.

◆ MI_REAL_SYSTEM_RANGE_START

#define MI_REAL_SYSTEM_RANGE_START   0xFFFF800000000000ULL

Definition at line 16 of file mm.h.

◆ MI_SECONDARY_COLORS

#define MI_SECONDARY_COLORS   64

Definition at line 71 of file mm.h.

◆ MI_SESSION_IMAGE_SIZE

#define MI_SESSION_IMAGE_SIZE   (16 * _1MB)

Definition at line 58 of file mm.h.

◆ MI_SESSION_POOL_SIZE

#define MI_SESSION_POOL_SIZE   (64 * _1MB)

Definition at line 57 of file mm.h.

◆ MI_SESSION_SIZE

#define MI_SESSION_SIZE
Value:
#define MI_SESSION_WORKING_SET_SIZE
Definition: mm.h:67
#define MI_SESSION_VIEW_SIZE
Definition: mm.h:64
#define MI_SESSION_IMAGE_SIZE
Definition: mm.h:66
#define MI_SESSION_POOL_SIZE
Definition: mm.h:65

Definition at line 60 of file mm.h.

◆ MI_SESSION_SPACE_END

#define MI_SESSION_SPACE_END   0xFFFFF98000000000ULL

Definition at line 23 of file mm.h.

◆ MI_SESSION_VIEW_SIZE

#define MI_SESSION_VIEW_SIZE   (512 * _1MB)

Definition at line 56 of file mm.h.

◆ MI_SESSION_WORKING_SET_SIZE

#define MI_SESSION_WORKING_SET_SIZE   (16 * _1MB)

Definition at line 59 of file mm.h.

◆ MI_SYSTEM_CACHE_END

#define MI_SYSTEM_CACHE_END   0xFFFFFA7FFFFFFFFFULL

Definition at line 25 of file mm.h.

◆ MI_SYSTEM_CACHE_START

#define MI_SYSTEM_CACHE_START   0xFFFFF98000000000ULL

Definition at line 24 of file mm.h.

◆ MI_SYSTEM_CACHE_WS_START

#define MI_SYSTEM_CACHE_WS_START   0xFFFFF78000001000ULL

Definition at line 19 of file mm.h.

◆ MI_SYSTEM_PTE_BASE

#define MI_SYSTEM_PTE_BASE   (PVOID)MiAddressToPte(KSEG0_BASE)

Definition at line 39 of file mm.h.

◆ MI_SYSTEM_VIEW_SIZE

#define MI_SYSTEM_VIEW_SIZE   (512 * _1MB)

Definition at line 55 of file mm.h.

◆ MI_USER_PROBE_ADDRESS

#define MI_USER_PROBE_ADDRESS   (PVOID)0x000007FFFFFF0000ULL

Definition at line 14 of file mm.h.

◆ MI_VA_LEVEL_SHIFT

#define MI_VA_LEVEL_SHIFT (   Level)    (PTI_SHIFT + 9 * (Level))

Definition at line 134 of file mm.h.

◆ MI_VA_SIGNIFICANT_BITS

#define MI_VA_SIGNIFICANT_BITS   48

Definition at line 135 of file mm.h.

◆ MI_VAD_BITMAP

#define MI_VAD_BITMAP   (MI_DUMMY_PTE + PAGE_SIZE)

Definition at line 44 of file mm.h.

◆ MI_WORKING_SET_LIST

#define MI_WORKING_SET_LIST   (MI_VAD_BITMAP + PAGE_SIZE)

Definition at line 45 of file mm.h.

◆ MI_WRITE_VALID_PPE

#define MI_WRITE_VALID_PPE   MI_WRITE_VALID_PTE

Definition at line 130 of file mm.h.

◆ MI_ZERO_PTES

#define MI_ZERO_PTES   (32)

Definition at line 76 of file mm.h.

◆ MiAddressToPde

#define MiAddressToPde (   x)    MiArm64AddressToEntry((PVOID)(x), 1, PDE_BASE)

Definition at line 151 of file mm.h.

◆ MiAddressToPdeOffset

#define MiAddressToPdeOffset (   x)    MiAddressToPdi(x)

Definition at line 172 of file mm.h.

◆ MiAddressToPpe

#define MiAddressToPpe (   x)    MiArm64AddressToEntry((PVOID)(x), 2, PPE_BASE)

Definition at line 152 of file mm.h.

◆ MiAddressToPte

#define MiAddressToPte (   x)    MiArm64AddressToEntry((PVOID)(x), 0, PTE_BASE)

Definition at line 150 of file mm.h.

◆ MiAddressToPteOffset

#define MiAddressToPteOffset (   x)    MiAddressToPti(x)

Definition at line 163 of file mm.h.

◆ MiAddressToPxe

#define MiAddressToPxe (   x)    MiArm64AddressToEntry((PVOID)(x), 3, PXE_BASE)

Definition at line 153 of file mm.h.

◆ MiGetPdeOffset

#define MiGetPdeOffset (   x)    MiAddressToPdi(x)

Definition at line 173 of file mm.h.

◆ MiIsPteOnPdeBoundary

#define MiIsPteOnPdeBoundary (   PointerPte)     ((((ULONG_PTR)(PointerPte)) & (PAGE_SIZE - 1)) == 0)

Definition at line 213 of file mm.h.

◆ MiIsPteOnPpeBoundary

#define MiIsPteOnPpeBoundary (   PointerPte)     ((((ULONG_PTR)(PointerPte)) & (PDE_PER_PAGE * PAGE_SIZE - 1)) == 0)

Definition at line 215 of file mm.h.

◆ MiIsPteOnPxeBoundary

#define MiIsPteOnPxeBoundary (   PointerPte)     ((((ULONG_PTR)(PointerPte)) & (PPE_PER_PAGE * PDE_PER_PAGE * PAGE_SIZE - 1)) == 0)

Definition at line 217 of file mm.h.

◆ MiPdeToAddress

#define MiPdeToAddress (   x)    MiArm64EntryToAddress((x), 1)

Definition at line 198 of file mm.h.

◆ MiPdeToPpe

#define MiPdeToPpe (   x)    ((PMMPPE)MiAddressToPte(x))

Definition at line 209 of file mm.h.

◆ MiPdeToPte

#define MiPdeToPte (   x)    ((PMMPTE)MiPteToAddress(x))

Definition at line 203 of file mm.h.

◆ MiPdeToPxe

#define MiPdeToPxe (   x)    ((PMMPXE)MiAddressToPde(x))

Definition at line 210 of file mm.h.

◆ MiPpeToAddress

#define MiPpeToAddress (   x)    MiArm64EntryToAddress((x), 2)

Definition at line 199 of file mm.h.

◆ MiPpeToPte

#define MiPpeToPte (   x)    ((PMMPTE)MiPdeToAddress(x))

Definition at line 204 of file mm.h.

◆ MiProtoPteToPte

#define MiProtoPteToPte (   x)     (PMMPTE)(((LONG64)(x)->u.Long) >> 16)

Definition at line 221 of file mm.h.

◆ MiPteToAddress

#define MiPteToAddress (   x)    MiArm64EntryToAddress((x), 0)

Definition at line 197 of file mm.h.

◆ MiPteToPde

#define MiPteToPde (   x)    ((PMMPDE)MiAddressToPte(x))

Definition at line 206 of file mm.h.

◆ MiPteToPpe

#define MiPteToPpe (   x)    ((PMMPPE)MiAddressToPde(x))

Definition at line 207 of file mm.h.

◆ MiPteToPxe

#define MiPteToPxe (   x)    ((PMMPXE)MiAddressToPpe(x))

Definition at line 208 of file mm.h.

◆ MiPxeToAddress

#define MiPxeToAddress (   x)    MiArm64EntryToAddress((x), 3)

Definition at line 200 of file mm.h.

◆ MiPxeToPte

#define MiPxeToPte (   x)    ((PMMPTE)MiPpeToAddress(x))

Definition at line 205 of file mm.h.

◆ MiSubsectionPteToSubsection

#define MiSubsectionPteToSubsection (   x)     (PMMPTE)((LONG64)(x)->u.Subsect.SubsectionAddress)

Definition at line 224 of file mm.h.

◆ MM_EMPTY_LIST

#define MM_EMPTY_LIST   ((ULONG_PTR)-1)

Definition at line 82 of file mm.h.

◆ MM_EMPTY_PTE_LIST

#define MM_EMPTY_PTE_LIST   ((ULONG64)0xFFFFFFFF)

Definition at line 81 of file mm.h.

◆ MM_HIGHEST_USER_ADDRESS_WOW64

#define MM_HIGHEST_USER_ADDRESS_WOW64   0x7FFEFFFF

Definition at line 32 of file mm.h.

◆ MM_HIGHEST_VAD_ADDRESS

#define MM_HIGHEST_VAD_ADDRESS   (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE))

Definition at line 40 of file mm.h.

◆ MM_PTE_SOFTWARE_PROTECTION_BITS

#define MM_PTE_SOFTWARE_PROTECTION_BITS   5

Definition at line 69 of file mm.h.

◆ MM_SYSTEM_RANGE_START_WOW64

#define MM_SYSTEM_RANGE_START_WOW64   0x80000000

Definition at line 33 of file mm.h.

◆ MM_SYSTEM_SPACE_START

#define MM_SYSTEM_SPACE_START   0xFFFFF88000000000ULL

Definition at line 20 of file mm.h.

◆ MmSystemRangeStart

#define MmSystemRangeStart   ((PVOID)MI_REAL_SYSTEM_RANGE_START)

Definition at line 29 of file mm.h.

◆ PDE_MAPPED_VA

#define PDE_MAPPED_VA   (PTE_PER_PAGE * PAGE_SIZE)

Definition at line 36 of file mm.h.

◆ PFN_FROM_PDE

#define PFN_FROM_PDE (   v)    ((v)->u.Hard.PageFrameNumber)

Definition at line 91 of file mm.h.

◆ PFN_FROM_PPE

#define PFN_FROM_PPE (   v)    ((v)->u.Hard.PageFrameNumber)

Definition at line 92 of file mm.h.

◆ PFN_FROM_PTE

#define PFN_FROM_PTE (   v)    ((v)->u.Hard.PageFrameNumber)

Definition at line 90 of file mm.h.

◆ PFN_FROM_PXE

#define PFN_FROM_PXE (   v)    ((v)->u.Hard.PageFrameNumber)

Definition at line 93 of file mm.h.

◆ SESSION_POOL_LOOKASIDES

#define SESSION_POOL_LOOKASIDES   21

Definition at line 78 of file mm.h.

◆ ValidKernelPpe

#define ValidKernelPpe   ValidKernelPde

Definition at line 131 of file mm.h.

Function Documentation

◆ MI_IS_MAPPED_PTE()

FORCEINLINE BOOLEAN MI_IS_MAPPED_PTE ( _In_ PMMPTE  PointerPte)

Definition at line 251 of file mm.h.

253{
254 return ((PointerPte->u.Hard.Valid != 0) ||
255 (PointerPte->u.Proto.Prototype != 0) ||
256 (PointerPte->u.Trans.Transition != 0) ||
257 (PointerPte->u.Hard.PageFrameNumber != 0));
258}

◆ MI_MAKE_PROTOTYPE_PTE()

FORCEINLINE VOID MI_MAKE_PROTOTYPE_PTE ( _Out_ PMMPTE  NewPte,
_In_ PMMPTE  PointerPte 
)

Definition at line 240 of file mm.h.

243{
244 NewPte->u.Long = (ULONG64)PointerPte << 16;
245 NewPte->u.Proto.Prototype = 1;
246 ASSERT(MiProtoPteToPte(NewPte) == PointerPte);
247}
#define ASSERT(a)
Definition: mode.c:44
unsigned __int64 ULONG64
Definition: imports.h:198
#define MiProtoPteToPte(x)
Definition: mm.h:315

◆ MI_MAKE_SUBSECTION_PTE()

FORCEINLINE VOID MI_MAKE_SUBSECTION_PTE ( _Out_ PMMPTE  NewPte,
_In_ PVOID  Segment 
)

Definition at line 229 of file mm.h.

232{
233 NewPte->u.Long = 0;
234 NewPte->u.Subsect.Prototype = 1;
235 NewPte->u.Subsect.SubsectionAddress = ((ULONG_PTR)Segment & 0x0000FFFFFFFFFFFFULL);
236}
#define ULONG_PTR
Definition: config.h:101
_Inout_ PVOID Segment
Definition: exfuncs.h:1101

◆ MiAddressToPdi()

FORCEINLINE ULONG MiAddressToPdi ( _In_ PVOID  Address)

Definition at line 167 of file mm.h.

169{
170 return (ULONG)(((ULONG64)Address >> PDI_SHIFT) & PDI_MASK_ARM64);
171}
static WCHAR Address[46]
Definition: ping.c:68
#define PDI_SHIFT
#define PDI_MASK_ARM64
uint32_t ULONG
Definition: typedefs.h:59

◆ MiAddressToPti()

FORCEINLINE ULONG MiAddressToPti ( _In_ PVOID  Address)

Definition at line 158 of file mm.h.

160{
161 return (ULONG)(((ULONG64)Address >> PTI_SHIFT) & PTI_MASK_ARM64);
162}
#define PTI_SHIFT
#define PTI_MASK_ARM64

◆ MiAddressToPxi()

FORCEINLINE ULONG MiAddressToPxi ( _In_ PVOID  Address)

Definition at line 177 of file mm.h.

179{
180 return (ULONG)(((ULONG64)Address >> PXI_SHIFT) & PXI_MASK);
181}
#define PXI_SHIFT
#define PXI_MASK

◆ MiArm64AddressToEntry()

FORCEINLINE PMMPTE MiArm64AddressToEntry ( _In_ PVOID  Address,
_In_ ULONG  Level,
_In_ ULONG_PTR  TableBase 
)

Definition at line 139 of file mm.h.

143{
145
147 return (PMMPTE)TableBase + Index;
148}
_In_ ULONG _In_ UCHAR Level
Definition: dispmprt.h:1329
#define MI_VA_LEVEL_SHIFT(Level)
Definition: mm.h:134
#define MI_VA_SIGNIFICANT_BITS
Definition: mm.h:135
_In_ WDFCOLLECTION _In_ ULONG Index

◆ MiArm64EntryToAddress()

FORCEINLINE PVOID MiArm64EntryToAddress ( _In_ PVOID  Entry,
_In_ ULONG  Level 
)

Definition at line 186 of file mm.h.

189{
191
193 Value <<= (64 - MI_VA_SIGNIFICANT_BITS);
194 return (PVOID)(Value >> (64 - MI_VA_SIGNIFICANT_BITS));
195}
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
int64_t LONG64
Definition: typedefs.h:68
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

◆ MiIsPdeForAddressValid()

FORCEINLINE BOOLEAN MiIsPdeForAddressValid ( _In_ PVOID  Address)

Definition at line 262 of file mm.h.

264{
265 return ((MiAddressToPxe(Address)->u.Hard.Valid) &&
266 (MiAddressToPpe(Address)->u.Hard.Valid) &&
267 (MiAddressToPde(Address)->u.Hard.Valid));
268}
#define MiAddressToPde(x)
Definition: mm.h:155
#define MiAddressToPxe(x)
Definition: mm.h:153
#define MiAddressToPpe(x)
Definition: mm.h:152