11 #define MI_LOWEST_VAD_ADDRESS (PVOID)MM_LOWEST_USER_ADDRESS 15 #define _1MB (1024 * _1KB) 16 #define _1GB (1024 * _1MB) 19 #define _64K (64 * _1KB) 22 #define PT_SIZE (PTE_PER_PAGE * sizeof(MMPTE)) 25 #define PD_SIZE (PDE_PER_PAGE * sizeof(MMPDE)) 28 #define SYSTEM_PD_SIZE (PPE_PER_PAGE * PD_SIZE) 39 #define MM_ZERO_ACCESS 0 42 #define MM_EXECUTE_READ 3 43 #define MM_READWRITE 4 44 #define MM_WRITECOPY 5 45 #define MM_EXECUTE_READWRITE 6 46 #define MM_EXECUTE_WRITECOPY 7 47 #define MM_PROTECT_ACCESS 7 52 #define MM_NOCACHE 0x08 53 #define MM_GUARDPAGE 0x10 54 #define MM_WRITECOMBINE 0x18 55 #define MM_PROTECT_SPECIAL 0x18 60 #define MM_DECOMMIT (MM_ZERO_ACCESS | MM_GUARDPAGE) 61 #define MM_NOACCESS (MM_ZERO_ACCESS | MM_WRITECOMBINE) 62 #define MM_OUTSWAPPED_KSTACK (MM_EXECUTE_WRITECOPY | MM_WRITECOMBINE) 63 #define MM_INVALID_PROTECTION 0xFFFFFFFF 82 #define PTE_READONLY 0 // Doesn't exist on x86 83 #define PTE_EXECUTE 0 // Not worrying about NX yet 84 #define PTE_EXECUTE_READ 0 // Not worrying about NX yet 85 #define PTE_READWRITE 0x2 86 #define PTE_WRITECOPY 0x200 87 #define PTE_EXECUTE_READWRITE 0x2 // Not worrying about NX yet 88 #define PTE_EXECUTE_WRITECOPY 0x200 89 #define PTE_PROTOTYPE 0x400 95 #define PTE_ACCESSED 0x20 96 #define PTE_DIRTY 0x40 101 #define PTE_ENABLE_CACHE 0 102 #define PTE_DISABLE_CACHE 0x10 103 #define PTE_WRITECOMBINED_CACHE 0x10 104 #define PTE_PROTECT_MASK 0x612 105 #elif defined(_M_AMD64) 109 #define PTE_READONLY 0x8000000000000000ULL 110 #define PTE_EXECUTE 0x0000000000000000ULL 111 #define PTE_EXECUTE_READ PTE_EXECUTE 112 #define PTE_READWRITE 0x8000000000000002ULL 113 #define PTE_WRITECOPY 0x8000000000000200ULL 114 #define PTE_EXECUTE_READWRITE 0x0000000000000002ULL 115 #define PTE_EXECUTE_WRITECOPY 0x0000000000000200ULL 116 #define PTE_PROTOTYPE 0x0000000000000400ULL 121 #define PTE_VALID 0x0000000000000001ULL 122 #define PTE_ACCESSED 0x0000000000000020ULL 123 #define PTE_DIRTY 0x0000000000000040ULL 128 #define PTE_ENABLE_CACHE 0x0000000000000000ULL 129 #define PTE_DISABLE_CACHE 0x0000000000000010ULL 130 #define PTE_WRITECOMBINED_CACHE 0x0000000000000010ULL 131 #define PTE_PROTECT_MASK 0x8000000000000612ULL 132 #elif defined(_M_ARM) 133 #define PTE_READONLY 0x200 134 #define PTE_EXECUTE 0 // Not worrying about NX yet 135 #define PTE_EXECUTE_READ 0 // Not worrying about NX yet 136 #define PTE_READWRITE 0 // Doesn't exist on ARM 137 #define PTE_WRITECOPY 0 // Doesn't exist on ARM 138 #define PTE_EXECUTE_READWRITE 0 // Not worrying about NX yet 139 #define PTE_EXECUTE_WRITECOPY 0 // Not worrying about NX yet 140 #define PTE_PROTOTYPE 0x400 // Using the Shared bit 145 #define PTE_ENABLE_CACHE 0 146 #define PTE_DISABLE_CACHE 0x10 147 #define PTE_WRITECOMBINED_CACHE 0x10 148 #define PTE_PROTECT_MASK 0x610 150 #error Define these please! 156 #define IMAGE_SCN_PROTECTION_MASK (IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_EXECUTE) 164 #define MI_IS_SESSION_IMAGE_ADDRESS(Address) \ 165 (((Address) >= MiSessionImageStart) && ((Address) < MiSessionImageEnd)) 167 #define MI_IS_SESSION_ADDRESS(Address) \ 168 (((Address) >= MmSessionBase) && ((Address) < MiSessionSpaceEnd)) 170 #define MI_IS_SESSION_PTE(Pte) \ 171 ((((PMMPTE)Pte) >= MiSessionBasePte) && (((PMMPTE)Pte) < MiSessionLastPte)) 173 #define MI_IS_PAGE_TABLE_ADDRESS(Address) \ 174 (((PVOID)(Address) >= (PVOID)PTE_BASE) && ((PVOID)(Address) <= (PVOID)PTE_TOP)) 176 #define MI_IS_SYSTEM_PAGE_TABLE_ADDRESS(Address) \ 177 (((Address) >= (PVOID)MiAddressToPte(MmSystemRangeStart)) && ((Address) <= (PVOID)PTE_TOP)) 179 #define MI_IS_PAGE_TABLE_OR_HYPER_ADDRESS(Address) \ 180 (((PVOID)(Address) >= (PVOID)PTE_BASE) && ((PVOID)(Address) <= (PVOID)MmHyperSpaceEnd)) 185 #define MI_MAKE_SOFTWARE_PTE(p, x) ((p)->u.Long = (x << MM_PTE_SOFTWARE_PROTECTION_BITS)) 190 #define MI_SET_PFN_DELETED(x) ((x)->PteAddress = (PMMPTE)((ULONG_PTR)(x)->PteAddress | 1)) 191 #define MI_IS_PFN_DELETED(x) ((ULONG_PTR)((x)->PteAddress) & 1) 197 #define MM_SYSLDR_NO_IMPORTS (PVOID)0xFFFFFFFFFFFFFFFEULL 198 #define MM_SYSLDR_BOOT_LOADED (PVOID)0xFFFFFFFFFFFFFFFFULL 200 #define MM_SYSLDR_NO_IMPORTS (PVOID)0xFFFFFFFE 201 #define MM_SYSLDR_BOOT_LOADED (PVOID)0xFFFFFFFF 203 #define MM_SYSLDR_SINGLE_ENTRY 0x1 208 #define MI_INITIAL_SESSION_IDS 64 210 #if defined(_M_IX86) || defined(_M_ARM) 214 #define LIST_HEAD 0xFFFFFFFF 221 #define COLORED_LIST_HEAD ((1 << 25) - 1) // 0x1FFFFFF 222 #elif defined(_M_AMD64) 223 #define LIST_HEAD 0xFFFFFFFFFFFFFFFFLL 224 #define COLORED_LIST_HEAD ((1ULL << 57) - 1) // 0x1FFFFFFFFFFFFFFLL 226 #error Define these please! 232 #define MM_NOIRQL (KIRQL)0xFFFFFFFF 237 #define MI_GET_PAGE_COLOR(x) ((x) & MmSecondaryColorMask) 238 #define MI_GET_NEXT_COLOR() (MI_GET_PAGE_COLOR(++MmSystemPageColor)) 239 #define MI_GET_NEXT_PROCESS_COLOR(x) (MI_GET_PAGE_COLOR(++(x)->NextPageColor)) 245 #define MI_PTE_LOOKUP_NEEDED 0xffffffffULL 247 #define MI_PTE_LOOKUP_NEEDED 0xFFFFF 253 #define MI_SESSION_DATA_PAGES_MAXIMUM (MM_ALLOCATION_GRANULARITY / PAGE_SIZE) 254 #define MI_SESSION_TAG_PAGES_MAXIMUM (MM_ALLOCATION_GRANULARITY / PAGE_SIZE) 259 #define MM_READ_WRITE_ALLOWED 11 260 #define MM_READ_ONLY_ALLOWED 10 261 #define MM_NO_ACCESS_ALLOWED 01 262 #define MM_DELETE_CHECK 85 267 #define MI_SYSTEM_VIEW_BUCKET_SIZE _64K 273 #define POOL_BLOCK_SIZE 16 275 #define POOL_BLOCK_SIZE 8 277 #define POOL_LISTS_PER_PAGE (PAGE_SIZE / POOL_BLOCK_SIZE) 278 #define BASE_POOL_TYPE_MASK 1 279 #define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + POOL_BLOCK_SIZE)) 284 #define POOL_FLAG_CHECK_TIMERS 0x1 285 #define POOL_FLAG_CHECK_WORKERS 0x2 286 #define POOL_FLAG_CHECK_RESOURCES 0x4 287 #define POOL_FLAG_VERIFIER 0x8 288 #define POOL_FLAG_CHECK_DEADLOCK 0x10 289 #define POOL_FLAG_SPECIAL_POOL 0x20 290 #define POOL_FLAG_DBGPRINT_ON_FAILURE 0x40 291 #define POOL_FLAG_CRASH_ON_FAILURE 0x80 296 #define POOL_CORRUPTED_LIST 3 297 #define POOL_SIZE_OR_INDEX_MISMATCH 5 298 #define POOL_ENTRIES_NOT_ALIGNED_PREVIOUS 6 299 #define POOL_HEADER_NOT_ALIGNED 7 300 #define POOL_HEADER_IS_ZERO 8 301 #define POOL_ENTRIES_NOT_ALIGNED_NEXT 9 302 #define POOL_ENTRY_NOT_FOUND 10 307 #define POOL_ENTRY_CORRUPTED 1 308 #define POOL_ENTRY_ALREADY_FREE 6 309 #define POOL_ENTRY_NOT_ALLOCATED 7 310 #define POOL_ALLOC_IRQL_INVALID 8 311 #define POOL_FREE_IRQL_INVALID 9 312 #define POOL_BILLED_PROCESS_INVALID 13 313 #define POOL_HEADER_SIZE_INVALID 32 510 #if defined (_M_AMD64) 515 #if defined (_M_AMD64) 516 PMMPTE SpecialPoolFirstPte;
517 PMMPTE SpecialPoolLastPte;
518 PMMPTE NextPdeForSpecialPoolExpansion;
519 PMMPTE LastPdeForSpecialPoolExpansion;
751 MiIsUserPxe(PointerPte) ||
754 MiIsUserPpe(PointerPte) ||
805 NewPte->u.Hard.PageFrameNumber = PageFrameNumber;
825 NewPte->u.Hard.Valid =
TRUE;
826 NewPte->u.Hard.Owner =
TRUE;
827 NewPte->u.Hard.PageFrameNumber = PageFrameNumber;
844 NewPte->u.Proto.Prototype = 1;
857 NewPte->u.Proto.ProtoAddressLow = (
Offset & 0x1FC) >> 2;
858 NewPte->u.Proto.ProtoAddressHigh = (
Offset & 0x3FFFFE00) >> 9;
873 NewPte->u.Subsect.Prototype = 1;
896 NewPte->u.Subsect.SubsectionAddressLow = (
Offset & 0x78) >> 3;
897 NewPte->u.Subsect.SubsectionAddressHigh = (
Offset & 0xFFFFF80) >> 7;
905 return ((PointerPte->
u.
Long & 0xFFFFFC01) != 0);
917 NewPte->u.Trans.Transition = 1;
918 NewPte->u.Trans.Protection = Protection;
919 NewPte->u.Trans.PageFrameNumber =
Page;
946 ASSERT(PointerPte->u.Hard.Valid == 0);
964 ASSERT(PointerPte->u.Hard.Valid == 1);
979 ASSERT(InvalidPte.u.Hard.Valid == 0);
980 ASSERT(InvalidPte.u.Long != 0);
981 *PointerPte = InvalidPte;
992 ASSERT(PointerPte->u.Long != 0);
993 PointerPte->u.Long = 0;
1005 ASSERT(PointerPde->u.Hard.Valid == 0);
1007 ASSERT(PointerPde->u.Hard.NoExecute == 0);
1022 ASSERT(InvalidPde.u.Hard.Valid == 0);
1023 ASSERT(InvalidPde.u.Long != 0);
1027 *PointerPde = InvalidPde;
1078 #define MI_IS_ROS_PFN(x) ((x)->u4.AweAllocation == TRUE) 1091 return (
Process->Vm.Flags.AcquiredUnsafe ==
TRUE);
1159 Process->Vm.Flags.AcquiredUnsafe = 1;
1224 Process->Vm.Flags.AcquiredUnsafe = 0;
1263 else if (WorkingSet->Flags.SessionSpace)
1298 else if (WorkingSet->Flags.SessionSpace)
1417 ProtoPte = Vad->FirstPrototypePte + (Vpn - Vad->StartingVpn);
1418 ASSERT(ProtoPte <= Vad->LastContiguousPte);
1442 ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
1443 ASSERT(Pfn1->u2.ShareCount == 0);
1446 if (Pfn1->u3.e2.ReferenceCount == 1)
1452 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1453 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1456 DPRINT1(
"Not returning commit for prototype PTE\n");
1471 USHORT RefCount, OldRefCount;
1478 OldRefCount = Pfn1->u3.e2.ReferenceCount;
1479 ASSERT(OldRefCount != 0);
1482 if (OldRefCount == 1)
1485 ASSERT(Pfn1->u3.e2.ReferenceCount == 1);
1487 ASSERT(Pfn1->u2.ShareCount == 0);
1490 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1491 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1494 DPRINT1(
"Not returning commit for prototype PTE\n");
1509 }
while (OldRefCount != RefCount);
1516 if (Pfn1->u2.ShareCount >= 1)
1522 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1523 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1543 USHORT RefCount, OldRefCount;
1546 ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
1560 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1561 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1564 DPRINT1(
"Not charging commit for prototype PTE\n");
1575 OldRefCount = Pfn1->u3.e2.ReferenceCount;
1576 ASSERT(OldRefCount != 0);
1577 ASSERT(OldRefCount < 2500);
1584 }
while (OldRefCount != RefCount);
1601 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1602 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1605 DPRINT1(
"Not charging commit for prototype PTE\n");
1613 if (NewRefCount == 2)
1616 if (Pfn1->u2.ShareCount)
1630 ASSERT(NewRefCount < 2500);
1646 ASSERT(Pfn1->u2.ShareCount == 0);
1650 if ((Pfn1->u3.e1.PrototypePte == 1) &&
1651 (Pfn1->OriginalPte.u.Soft.Prototype == 1))
1654 DPRINT1(
"Not charging commit for prototype PTE\n");
1662 if (NewRefCount != 1)
1665 ASSERT(NewRefCount < 2500);
2221 IN PVOID PageTableVirtualAddress,
2302 #if (_MI_PAGING_LEVELS == 2) 2305 MiSynchronizeSystemPde(
PMMPDE PointerPde)
2315 *PointerPde = SystemPde;
PVOID MiSessionImageStart
#define KeGetCurrentIrql()
#define MI_IS_PAGE_TABLE_ADDRESS(Address)
PFN_NUMBER MmResidentAvailableAtInit
PFN_NUMBER MiNumberOfFreePages
struct _PHYSICAL_MEMORY_DESCRIPTOR * PPHYSICAL_MEMORY_DESCRIPTOR
FORCEINLINE VOID MI_ERASE_PTE(IN PMMPTE PointerPte)
ULONG_PTR MmSubsectionBase
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
union _MM_SESSION_SPACE::@1806 u
#define _MI_PAGING_LEVELS
TABLE_SEARCH_RESULT NTAPI MiFindEmptyAddressRangeDownTree(IN SIZE_T Length, IN ULONG_PTR BoundaryAddress, IN ULONG_PTR Alignment, IN PMM_AVL_TABLE Table, OUT PULONG_PTR Base, OUT PMMADDRESS_NODE *Parent)
MMPFNLIST MmStandbyPageListByPriority[8]
MM_AVL_TABLE MmSectionBasedRoot
VOID NTAPI MiSessionRemoveProcess(VOID)
_In_ ULONG _In_ ULONG _In_ ULONG Length
PVOID MmNonPagedPoolStart
ULONG NTAPI MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress, IN KIRQL OldIrql)
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _In_ _Strict_type_match_ POOL_TYPE _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_opt_ ULONG _Out_ WDFLOOKASIDE * Lookaside
FORCEINLINE VOID MiUnlockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
#define MiAddressToPde(x)
BOOLEAN NTAPI KeAreAllApcsDisabled(VOID)
VOID NTAPI MiInitializePfnDatabase(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
FORCEINLINE KIRQL MiAcquireExpansionLock(VOID)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
PFN_NUMBER MmMinimumFreePages
PPHYSICAL_MEMORY_DESCRIPTOR NTAPI MmInitializeMemoryLimits(IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN PBOOLEAN IncludeType)
FORCEINLINE VOID MiDereferencePfnAndDropLockCount(IN PMMPFN Pfn1)
#define PsGetCurrentThread()
SIZE_T MmMinimumNonPagedPoolSize
PKEVENT MiHighNonPagedPoolEvent
KGUARDED_MUTEX MmSectionBasedMutex
USHORT UsedPageTableEntries[768]
#define MI_MAKE_ACCESSED_PAGE(x)
ULONG OwnsSystemWorkingSetShared
PMMPTE MmSystemPtesEnd[MaximumPtePoolTypes]
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG _In_ ULONG Protect
FORCEINLINE VOID MiUnlockProcessWorkingSetShared(IN PEPROCESS Process, IN PETHREAD Thread)
VOID NTAPI MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal)
LONG ProcessReferenceToSession
#define MI_MAKE_OWNER_PAGE(x)
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
struct _MMCOLOR_TABLES MMCOLOR_TABLES
#define MI_IS_SESSION_ADDRESS(Address)
POOL_TYPE NTAPI MmDeterminePoolType(IN PVOID PoolAddress)
VOID NTAPI MiInitializeLargePageSupport(VOID)
VOID NTAPI MiWriteProtectSystemImage(_In_ PVOID ImageBase)
FORCEINLINE BOOLEAN MI_IS_MAPPED_PTE(PMMPTE PointerPte)
ULONG MmMaxAdditionNonPagedPoolPerMb
enum _TABLE_SEARCH_RESULT TABLE_SEARCH_RESULT
ULONG MmTotalFreeSystemPtes[MaximumPtePoolTypes]
NTSTATUS NTAPI MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex, IN PMMPDE PointerPde, IN PFN_NUMBER ContainingPageFrame, IN BOOLEAN SessionAllocation)
VOID NTAPI MiDeleteARM3Section(PVOID ObjectBody)
PFN_NUMBER MmHighMemoryThreshold
struct _MI_LARGE_PAGE_RANGES MI_LARGE_PAGE_RANGES
FORCEINLINE VOID MiReferenceUnusedPageAndBumpLockCount(IN PMMPFN Pfn1)
PLDR_DATA_TABLE_ENTRY NTAPI MiLookupDataTableEntry(IN PVOID Address)
SIZE_T MmSessionImageSize
HARDWARE_PDE_ARMV6 TempPde
PMM_SESSION_SPACE MmSessionSpace
FORCEINLINE USHORT MiQueryPageTableReferences(IN PVOID Address)
#define SESSION_POOL_LOOKASIDES
KSPIN_LOCK MmExpansionLock
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
IN PVOID IN PVOID IN USHORT IN USHORT Size
PCHAR SystemSpaceViewStart
VOID NTAPI MiInitializePfnForOtherProcess(IN PFN_NUMBER PageFrameIndex, IN PVOID PteAddress, IN PFN_NUMBER PteFrame)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor
ULONG SystemSpaceHashEntries
PFN_COUNT MiExpansionPoolPagesInitialCharge
NTSTATUS NTAPI MiFindEmptyAddressRangeDownBasedTree(IN SIZE_T Length, IN ULONG_PTR BoundaryAddress, IN ULONG_PTR Alignment, IN PMM_AVL_TABLE Table, OUT PULONG_PTR Base)
ULONG MmLargePageDriverBufferLength
NTSTATUS FASTCALL MiCheckPdeForPagedPool(IN PVOID Address)
LARGE_INTEGER LastProcessSwappedOutTime
VOID NTAPI MiSyncCachedRanges(VOID)
SIZE_T MmMinimumStackCommitInBytes
LIST_ENTRY ListHeads[POOL_LISTS_PER_PAGE]
#define MiGetPdeOffset(x)
VOID NTAPI MiInsertBasedSection(IN PSECTION Section)
FORCEINLINE VOID MiReferenceUsedPageAndBumpLockCount(IN PMMPFN Pfn1)
BOOLEAN MmLargeSystemCache
SIZE_T MmAllocatedNonPagedPool
VOID NTAPI MiInitializeSessionSpaceLayout(VOID)
FORCEINLINE VOID MI_MAKE_SUBSECTION_PTE(IN PMMPTE NewPte, IN PVOID Segment)
PPOOL_TRACKER_TABLE PoolTrackTable
KGUARDED_MUTEX SystemSpaceViewLock
VOID NTAPI MiDeletePte(IN PMMPTE PointerPte, IN PVOID VirtualAddress, IN PEPROCESS CurrentProcess, IN PMMPTE PrototypePte)
struct _POOL_HEADER * PPOOL_HEADER
DRIVER_UNLOAD * PDRIVER_UNLOAD
MM_PAGED_POOL_INFO PagedPoolInfo
NTSTATUS NTAPI MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
enum _MI_PFN_CACHE_ATTRIBUTE MI_PFN_CACHE_ATTRIBUTE
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
SIZE_T MmSizeOfPagedPoolInBytes
enum _TYPE_OF_MEMORY TYPE_OF_MEMORY
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
BOOLEAN NTAPI MmArmInitSystem(IN ULONG Phase, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
FORCEINLINE BOOLEAN MI_IS_WS_UNSAFE(IN PEPROCESS Process)
PMMPTE MmLastReservedMappingPte
VOID NTAPI MiInitializeSessionWsSupport(VOID)
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD(IN PETHREAD Thread)
enum _MM_SYSTEM_SIZE MM_SYSTEMSIZE
FORCEINLINE BOOLEAN MiIsMemoryTypeInvisible(TYPE_OF_MEMORY MemoryType)
struct _MMSESSION * PMMSESSION
SIZE_T MmSystemLockPagesCount
PDRIVER_UNLOAD Win32KDriverUnload
struct _POOL_DESCRIPTOR * PPOOL_DESCRIPTOR
ULONG OwnsSessionWorkingSetShared
struct _POOL_TRACKER_BIG_PAGES POOL_TRACKER_BIG_PAGES
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
SIZE_T MmMaximumNonPagedPoolInBytes
PETHREAD MiExpansionLockOwner
VOID FASTCALL MiSyncARM3WithROS(IN PVOID AddressStart, IN PVOID AddressEnd)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
ULONG MmVerifyDriverBufferLength
#define KeMemoryBarrierWithoutFence()
#define InterlockedIncrementSizeT(a)
PFN_NUMBER NTAPI MiFindContiguousPages(IN PFN_NUMBER LowestPfn, IN PFN_NUMBER HighestPfn, IN PFN_NUMBER BoundaryPfn, IN PFN_NUMBER SizeInPages, IN MEMORY_CACHING_TYPE CacheType)
FORCEINLINE VOID MI_WRITE_INVALID_PDE(IN PMMPDE PointerPde, IN MMPDE InvalidPde)
PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor
LARGE_INTEGER MmCriticalSectionTimeout
MMPDE ValidKernelPdeLocal
VOID NTAPI MiInitializeSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE PoolType)
PFN_NUMBER MmPlentyFreePages
PKEVENT MiLowNonPagedPoolEvent
struct _MMCOLOR_TABLES * PMMCOLOR_TABLES
struct _MI_LARGE_PAGE_DRIVER_ENTRY * PMI_LARGE_PAGE_DRIVER_ENTRY
FORCEINLINE BOOLEAN MiIsUserPde(PVOID Address)
ULONG OwnsSessionWorkingSetExclusive
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock
VOID NTAPI MiInitializeSessionIds(VOID)
FORCEINLINE PFN_NUMBER MiRemoveZeroPageSafe(IN ULONG Color)
TABLE_SEARCH_RESULT NTAPI MiFindEmptyAddressRangeInTree(IN SIZE_T Length, IN ULONG_PTR Alignment, IN PMM_AVL_TABLE Table, OUT PMMADDRESS_NODE *PreviousVad, OUT PULONG_PTR Base)
const ULONG_PTR MmProtectToPteMask[32]
MM_PAGED_POOL_INFO MmPagedPoolInfo
POOL_DESCRIPTOR PagedPool
FORCEINLINE VOID MI_MAKE_TRANSITION_PTE(_Out_ PMMPTE NewPte, _In_ PFN_NUMBER Page, _In_ ULONG Protection)
VOID NTAPI MiMakePdeExistAndMakeValid(IN PMMPDE PointerPde, IN PEPROCESS TargetProcess, IN KIRQL OldIrql)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_opt_ PHYSICAL_ADDRESS _In_ MEMORY_CACHING_TYPE CacheType
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
struct _MM_SESSION_SPACE_FLAGS MM_SESSION_SPACE_FLAGS
FORCEINLINE VOID MI_MAKE_PROTOTYPE_PTE(IN PMMPTE NewPte, IN PMMPTE PointerPte)
#define KeLeaveGuardedRegion()
PFN_NUMBER MiHighPagedPoolThreshold
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
ULONG MmVerifyDriverLevel
KEVENT MmZeroingPageEvent
ULONG MmSecondaryColorMask
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
VOID NTAPI MiInsertPageInList(IN PMMPFNLIST ListHead, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
FORCEINLINE VOID MI_WRITE_VALID_PDE(IN PMMPDE PointerPde, IN MMPDE TempPde)
PFN_NUMBER NTAPI MiPagesInLoaderBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN PBOOLEAN IncludeType)
struct _POOL_TRACKER_TABLE POOL_TRACKER_TABLE
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
TABLE_SEARCH_RESULT NTAPI MiCheckForConflictingNode(IN ULONG_PTR StartVpn, IN ULONG_PTR EndVpn, IN PMM_AVL_TABLE Table, OUT PMMADDRESS_NODE *NodeOrParent)
PMMVIEW SystemSpaceViewTable
ULONG NTAPI MiMakeSystemAddressValid(IN PVOID PageTableVirtualAddress, IN PEPROCESS CurrentProcess)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS SkipBytes
PMMPTE MmSharedUserDataPte
PMMCOLOR_TABLES MmFreePagesByColor[FreePageList+1]
FORCEINLINE ULONG_PTR MiDetermineUserGlobalPteMask(IN PVOID PointerPte)
NTSTATUS NTAPI MiRosUnmapViewInSystemSpace(IN PVOID MappedBase)
NTSTATUS NTAPI MiCheckSecuredVad(IN PMMVAD Vad, IN PVOID Base, IN SIZE_T Size, IN ULONG ProtectionMask)
ULONG MmConsumedPoolPercentage
PMMPTE MmSystemPtesStart[MaximumPtePoolTypes]
FORCEINLINE VOID MiLockProcessWorkingSetUnsafe(IN PEPROCESS Process, IN PETHREAD Thread)
struct _MI_LARGE_PAGE_DRIVER_ENTRY MI_LARGE_PAGE_DRIVER_ENTRY
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
MM_SESSION_SPACE_FLAGS Flags
struct _MM_SESSION_SPACE * GlobalVirtualAddress
FORCEINLINE VOID MiDecrementPageTableReferences(IN PVOID Address)
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS NTAPI MiInsertVadEx(_Inout_ PMMVAD Vad, _In_ ULONG_PTR *BaseAddress, _In_ SIZE_T ViewSize, _In_ ULONG_PTR HighestAddress, _In_ ULONG_PTR Alignment, _In_ ULONG AllocationType)
NTSTATUS NTAPI MiUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN ULONG Flags)
PVOID MmNonPagedPoolExpansionStart
PMMPTE MmFirstReservedMappingPte
FORCEINLINE VOID MiUnlockProcessWorkingSetForFault(IN PEPROCESS Process, IN PETHREAD Thread, OUT PBOOLEAN Safe, OUT PBOOLEAN Shared)
#define MI_IS_SESSION_PTE(Pte)
ULONG ExpNumberOfPagedPools
struct _MM_SESSION_SPACE MM_SESSION_SPACE
_In_ WDFCOLLECTION _In_ ULONG Index
BOOLEAN NTAPI MiInitializeSystemSpaceMap(IN PMMSESSION InputSession OPTIONAL)
#define KeAcquireSpinLock(sl, irql)
ULONG MmMaximumNonPagedPoolPercent
enum _MMSYSTEM_PTE_POOL_TYPE MMSYSTEM_PTE_POOL_TYPE
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
struct _PHYSICAL_MEMORY_RUN PHYSICAL_MEMORY_RUN
#define InterlockedIncrement16
NTSTATUS NTAPI MiQueryMemorySectionName(IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID MemoryInformation, IN SIZE_T MemoryInformationLength, OUT PSIZE_T ReturnLength)
HARDWARE_PTE_ARMV6 TempPte
C_ASSERT(sizeof(POOL_HEADER)==POOL_BLOCK_SIZE)
PFN_NUMBER MiHighNonPagedPoolThreshold
#define KeEnterGuardedRegion()
ULONG SessionPoolAllocationFailures[4]
PMMADDRESS_NODE NTAPI MiGetNextNode(IN PMMADDRESS_NODE Node)
FORCEINLINE VOID MiLockProcessWorkingSetShared(IN PEPROCESS Process, IN PETHREAD Thread)
ULONG_PTR MxPfnAllocation
FORCEINLINE BOOLEAN MiIsUserPte(PVOID Address)
VOID NTAPI MiDecrementReferenceCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
PKGUARDED_MUTEX SystemSpaceViewLockPointer
PFN_NUMBER MmLowMemoryThreshold
KGUARDED_MUTEX PagedPoolMutex
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
PCONTROL_AREA ControlArea
PFN_NUMBER MmMaximumNonPagedPoolInPages
PMMPTE MiSessionImagePteStart
FORCEINLINE VOID MiDropLockCount(IN PMMPFN Pfn1)
ULONG NTAPI MiMakeProtectionMask(IN ULONG Protect)
SLIST_HEADER MmDeadStackSListHead
ULONG MmMinAdditionNonPagedPoolPerMb
VOID NTAPI MiComputeColorInformation(VOID)
const ULONG MmProtectToValue[32]
struct _PHYSICAL_MEMORY_RUN * PPHYSICAL_MEMORY_RUN
ULONG OwnsSystemWorkingSetExclusive
LIST_HEAD(acpi_bus_event_list)
struct _MI_LARGE_PAGE_RANGES * PMI_LARGE_PAGE_RANGES
BOOLEAN MmProtectFreedNonPagedPool
VOID NTAPI ExInitializePoolDescriptor(IN PPOOL_DESCRIPTOR PoolDescriptor, IN POOL_TYPE PoolType, IN ULONG PoolIndex, IN ULONG Threshold, IN PVOID PoolLock)
MM_SYSTEMSIZE MmSystemSize
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG AllocationType
LIST_ENTRY MmWorkingSetExpansionHead
VOID NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table)
enum _MI_PFN_CACHE_ATTRIBUTE * PMI_PFN_CACHE_ATTRIBUTE
ULONG MmNumberOfSystemPtes
PFN_NUMBER MiLowPagedPoolThreshold
NTSTATUS NTAPI MiSessionCommitPageTables(IN PVOID StartVa, IN PVOID EndVa)
#define MM_EXECUTE_READWRITE
PFN_COUNT NTAPI MiDeleteSystemPageableVm(IN PMMPTE PointerPte, IN PFN_NUMBER PageCount, IN ULONG Flags, OUT PPFN_NUMBER ValidPages)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
PVOID NTAPI MiCheckForContiguousMemory(IN PVOID BaseAddress, IN PFN_NUMBER BaseAddressPages, IN PFN_NUMBER SizeInPages, IN PFN_NUMBER LowestPfn, IN PFN_NUMBER HighestPfn, IN PFN_NUMBER BoundaryPfn, IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute)
_In_ ULONG _In_ ULONG Offset
VOID NTAPI MiDeleteVirtualAddresses(IN ULONG_PTR Va, IN ULONG_PTR EndingAddress, IN PMMVAD Vad)
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID MiLockProcessWorkingSetForFault(IN PEPROCESS Process, IN PETHREAD Thread, IN BOOLEAN Safe, IN BOOLEAN Shared)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
WCHAR MmLargePageDriverBuffer[512]
PSUBSECTION NTAPI MiLocateSubsection(IN PMMVAD Vad, IN ULONG_PTR Vpn)
struct _MMSESSION MMSESSION
PRTL_BITMAP SystemSpaceBitMap
SIZE_T MmDefaultMaximumNonPagedPool
ULONG MmVerifyDriverBufferType
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS HighAddress
SIZE_T MmAllocationFragment
PFN_NUMBER NTAPI MxGetNextPage(IN PFN_NUMBER PageCount)
PMMPTE MiFirstReservedZeroingPte
BOOLEAN MiLargePageAllDrivers
ULONG NTAPI MiGetPageProtection(IN PMMPTE PointerPte)
NTSTATUS NTAPI MiInitializeSessionPool(VOID)
_Out_ PKAPC_STATE ApcState
VOID NTAPI MiZeroPhysicalPage(IN PFN_NUMBER PageFrameIndex)
LONG ResidentProcessCount
VOID NTAPI MiInitializeNonPagedPoolThresholds(VOID)
PFN_NUMBER MmSystemPageDirectory[PPE_PER_PAGE]
MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType]
ULONG OwnsProcessWorkingSetShared
VOID NTAPI InitializePool(IN POOL_TYPE PoolType, IN ULONG Threshold)
BOOLEAN NTAPI MiInitializeMemoryEvents(VOID)
VOID NTAPI MiInitializeDriverLargePageList(VOID)
PPOOL_DESCRIPTOR ExpPagedPoolDescriptor[16+1]
VOID NTAPI MiMapPfnDatabase(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
FORCEINLINE VOID MiReleaseExpansionLock(KIRQL OldIrql)
#define KeReleaseSpinLock(sl, irql)
#define InterlockedCompareExchange16
PKEVENT MiLowPagedPoolEvent
PFN_NUMBER MmResidentAvailablePages
VOID NTAPI MiInitializePoolEvents(VOID)
#define POOL_LISTS_PER_PAGE
SIZE_T MmSizeOfNonPagedPoolInBytes
_Must_inspect_result_ _Outptr_result_bytebuffer_ ViewSize PVOID * MappedBase
WCHAR MmVerifyDriverBuffer[512]
POOL_DESCRIPTOR NonPagedPoolDescriptor
struct _MM_SESSION_SPACE * PMM_SESSION_SPACE
FORCEINLINE BOOLEAN MiIsMemoryTypeFree(TYPE_OF_MEMORY MemoryType)
NTSTATUS NTAPI MiRosProtectVirtualMemory(IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T NumberOfBytesToProtect, IN ULONG NewAccessProtection, OUT PULONG OldAccessProtection OPTIONAL)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
VOID NTAPI MiSessionAddProcess(IN PEPROCESS NewProcess)
FORCEINLINE PFN_NUMBER MiGetPfnEntryIndex(IN PMMPFN Pfn1)
MMSUPPORT MmSystemCacheWs
FORCEINLINE VOID ExReleasePushLockShared(PEX_PUSH_LOCK PushLock)
VOID NTAPI MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN MMPTE TempPte)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
ULONG MmMaximumDeadKernelStacks
FORCEINLINE VOID MiIncrementPageTableReferences(IN PVOID Address)
PKEVENT MiHighPagedPoolEvent
PMMWSL MmSystemCacheWorkingSetList
VOID NTAPI MiInitializeColorTables(VOID)
LIST_ENTRY MiLargePageDriverList
PMMADDRESS_NODE NTAPI MiGetPreviousNode(IN PMMADDRESS_NODE Node)
struct _POOL_TRACKER_BIG_PAGES * PPOOL_TRACKER_BIG_PAGES
VOID NTAPI MiRemoveMappedView(IN PEPROCESS CurrentProcess, IN PMMVAD Vad)
BOOLEAN NTAPI MiIsPfnInUse(IN PMMPFN Pfn1)
PFN_NUMBER MiLowNonPagedPoolThreshold
KGUARDED_MUTEX MmPagedPoolMutex
VOID NTAPI MiInsertVad(_Inout_ PMMVAD Vad, _Inout_ PMM_AVL_TABLE VadRoot)
#define InterlockedDecrementSizeT(a)
ULONG OwnsProcessWorkingSetExclusive
VOID NTAPI MiInsertNode(IN PMM_AVL_TABLE Table, IN PMMADDRESS_NODE NewNode, PMMADDRESS_NODE Parent, TABLE_SEARCH_RESULT Result)
ULONG MmCritsectTimeoutSeconds
struct _POOL_HEADER POOL_HEADER
FORCEINLINE VOID MiReferenceProbedPageAndBumpLockCount(IN PMMPFN Pfn1)
struct _PHYSICAL_MEMORY_DESCRIPTOR PHYSICAL_MEMORY_DESCRIPTOR
PFN_NUMBER MmSizeOfPagedPoolInPages
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_KERNEL(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
FORCEINLINE VOID MiLockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
NTSTATUS NTAPI MmArmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
MMPTE ValidKernelPteLocal
#define KeGetCurrentThread
struct _POOL_TRACKER_TABLE * PPOOL_TRACKER_TABLE
FORCEINLINE PVOID MiPteToAddress(PMMPTE PointerPte)
ULONG SystemSpaceHashSize
_In_ HANDLE ProcessHandle
enum _MEMORY_CACHING_TYPE MEMORY_CACHING_TYPE
KGUARDED_MUTEX MmSectionCommitMutex
VOID NTAPI MiInitializeNonPagedPool(VOID)
FORCEINLINE BOOLEAN MI_IS_PHYSICAL_ADDRESS(IN PVOID Address)
FORCEINLINE VOID MI_UPDATE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
FORCEINLINE BOOLEAN MI_WS_OWNER(IN PEPROCESS Process)
NTSTATUS NTAPI MiRosUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress, IN BOOLEAN SkipDebuggerNotify)
PKEVENT MiHighMemoryEvent
PFN_NUMBER MmTotalSystemDriverPages
VOID NTAPI MiUnlinkFreeOrZeroedPage(IN PMMPFN Entry)
BOOLEAN MmEnforceWriteProtection
PMDL NTAPI MiAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress, IN PHYSICAL_ADDRESS HighAddress, IN PHYSICAL_ADDRESS SkipBytes, IN SIZE_T TotalBytes, IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute, IN ULONG Flags)
base of all file and directory entries
BOOLEAN MmTrackLockedPages
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_ SIZE_T TotalBytes
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE PMMPTE MI_GET_PROTOTYPE_PTE_FOR_VPN(IN PMMVAD Vad, IN ULONG_PTR Vpn)
PFN_NUMBER SessionPageDirectoryIndex
FORCEINLINE BOOLEAN MiIsRosSectionObject(IN PVOID Section)
struct _POOL_DESCRIPTOR POOL_DESCRIPTOR
PULONG MinorVersion OPTIONAL
PVOID MmNonPagedSystemStart
PMMPTE MiSessionImagePteEnd