|
| #define | PML4_INDEX_BITS 9 |
| #define | PML4_INDEX_SHIFT 39 |
| #define | PML4_INDEX_MASK ((1ULL << PML4_INDEX_BITS) - 1ULL) |
| #define | PML4_INDEX_FROM_VA(VA) |
| #define | PML4_INDEX_FROM_PHYS(PHYS) |
| #define | VirtualPageSize 4096ULL |
| #define | PhysicalFrameSize 4096ULL |
| #define | KernelVaStart 0xfffff80000000000ULL |
| #define | PhysicalMemoryOffset 0xffff880000000000ULL |
| #define | RECURSIVE_INDEX 0x1FF |
| #define | INDEX_TO_PPFN(Index) |
| #define | PHYSICAL_TO_PPFN(PHYS) |
| #define | PTE_TO_PHYSICAL(PMMPTE) |
| #define | MI_WRITE_PTE(_PtePointer, _Va, _Pa, _Flags) |
| #define | MI_WRITE_PTE_NO_IPI(_PtePointer, _Va, _Pa, _Flags) |
| #define | PPFN_TO_INDEX(PPFN) |
| #define | PPFN_TO_PHYSICAL_ADDRESS(PPFN) |
| #define | VA_OFFSET(_VirtualAddress) |
| #define | MM_IS_DEMAND_ZERO_PTE(pte) |
| #define | MM_SET_DEMAND_ZERO_PTE(pte, prot_flags, nx) |
| #define | MM_UNSET_DEMAND_ZERO_PTE(pte) |
| #define | BYTES_TO_PAGES(Bytes) |
| #define | PAGES_TO_BYTES(Pages) |
| #define | PAGE_ALIGN(Va) |
| #define | MAX_POOL_DESCRIPTORS 7 |
| #define | _32B_POOL 1 |
| #define | _64B_POOL 2 |
| #define | _128B_POOL 3 |
| #define | _256B_POOL 4 |
| #define | _512B_POOL 5 |
| #define | _1024B_POOL 6 |
| #define | _2048B_POOL 7 |
| #define | POOL_MIN_ALLOC 32 |
| #define | POOL_MAX_ALLOC 2048 |
| #define | MI_NONPAGED_POOL_SIZE ((size_t)16ULL * 1024 * 1024 * 1024) |
| #define | MI_PAGED_POOL_SIZE ((size_t)32ULL * 1024 * 1024 * 1024) |
| #define | NONPAGED_POOL_VA_TOTAL_PAGES (MI_NONPAGED_POOL_SIZE / VirtualPageSize) |
| #define | PAGED_POOL_VA_TOTAL_PAGES (MI_PAGED_POOL_SIZE / VirtualPageSize) |
| #define | NONPAGED_POOL_VA_BITMAP_QWORDS ((NONPAGED_POOL_VA_TOTAL_PAGES + 63) / 64) |
| #define | PAGED_POOL_VA_BITMAP_QWORDS ((PAGED_POOL_VA_TOTAL_PAGES + 63) / 64) |
| #define | MI_NONPAGED_BITMAP_PAGES_NEEDED ((NONPAGED_POOL_VA_BITMAP_QWORDS * sizeof(uint64_t) + VirtualPageSize - 1) / VirtualPageSize) |
| #define | MI_PAGED_BITMAP_PAGES_NEEDED ((PAGED_POOL_VA_BITMAP_QWORDS * sizeof(uint64_t) + VirtualPageSize - 1) / VirtualPageSize) |
| #define | ALIGN_UP(x, align) |
| #define | MI_NONPAGED_BITMAP_BASE ALIGN_UP(LK_KERNEL_END, VirtualPageSize) |
| #define | MI_NONPAGED_BITMAP_END (MI_NONPAGED_BITMAP_BASE + MI_NONPAGED_BITMAP_PAGES_NEEDED * VirtualPageSize) |
| #define | MI_PAGED_BITMAP_BASE ALIGN_UP(MI_NONPAGED_BITMAP_END, VirtualPageSize) |
| #define | MI_PAGED_BITMAP_END (MI_PAGED_BITMAP_BASE + MI_PAGED_BITMAP_PAGES_NEEDED * VirtualPageSize) |
| #define | MI_NONPAGED_POOL_BASE ALIGN_UP(MI_PAGED_BITMAP_END, VirtualPageSize) |
| #define | MI_NONPAGED_POOL_END (MI_NONPAGED_POOL_BASE + MI_NONPAGED_POOL_SIZE) |
| #define | MI_PAGED_POOL_BASE ALIGN_UP(MI_NONPAGED_POOL_END, VirtualPageSize) |
| #define | MI_PAGED_POOL_END (MI_PAGED_POOL_BASE + MI_PAGED_POOL_SIZE) |
| #define | MI_IS_CANONICAL_ADDR(va) |
| #define | PFN_TO_PHYS(Pfn) |
| #define | PHYS_TO_INDEX(PhysicalAddress) |
| #define | PFN_ERROR UINT64_T_MAX |
| #define | PROT_KERNEL_READ (1ULL << 0) |
| #define | PROT_KERNEL_WRITE (1ULL << 1) |
| #define | PROT_KERNEL_NOEXECUTE (1ULL << 2) |
| #define | PROT_KERNEL_USER (1ULL << 3) |
| #define | MI_DEMAND_ZERO_BIT (1ULL << 16) |
| #define | MM_POOL_CANARY 'BEKA' |
| #define | MI_STACK_SIZE 0x4000 |
| #define | MI_LARGE_STACK_SIZE 0xf000 |
| #define | MI_GUARD_PAGE_PROTECTION (1ULL << 17) |
| #define | MI_DEFAULT_USER_STACK_SIZE 0x100000 |
| #define | MmFullBarrier() |
| #define | MmBarrier() |
| #define | MmIsAddressValid(VirtualAddress) |
| #define | MT_SECTION_QUERY 0x0001 |
| #define | MT_SECTION_MAP_WRITE 0x0002 |
| #define | MT_SECTION_MAP_READ 0x0004 |
| #define | MT_SECTION_MAP_EXECUTE 0x0008 |
| #define | MT_SECTION_EXTEND_SIZE 0x0010 |
| #define | MT_SECTION_MAP_EXECUTE_EXPL 0x0020 |
| #define | MT_SECTION_ALL_ACCESS 0x003F |
| #define | PAGE_PAT (1ULL << 7) |
| #define | R_X86_64_RELATIVE 8 |
| #define | USER_VA_END 0x00007FFFFFFFFFFF |
| #define | USER_VA_START 0x10000 |
|
| enum | _PFN_STATE {
PfnStateActive
, PfnStateStandby
, PfnStateModified
, PfnStateFree
,
PfnStateZeroed
, PfnStateTransition
, PfnStateBad
} |
| enum | _PFN_FLAGS {
PFN_FLAG_NONE = 0
, PFN_FLAG_NONPAGED = (1U << 0)
, PFN_FLAG_COPY_ON_WRITE = (1U << 1)
, PFN_FLAG_MAPPED_FILE = (1U << 2)
,
PFN_FLAG_LOCKED_FOR_IO = (1U << 3)
} |
| enum | _VAD_FLAGS {
VAD_FLAG_NONE = 0
, VAD_FLAG_READ = (1U << 0)
, VAD_FLAG_WRITE = (1U << 1)
, VAD_FLAG_EXECUTE = (1U << 2)
,
VAD_FLAG_PRIVATE = (1U << 3)
, VAD_FLAG_MAPPED_FILE = (1U << 4)
, VAD_FLAG_COPY_ON_WRITE = (1U << 5)
, VAD_FLAG_RESERVED = (1U << 6)
,
VAD_FLAG_GUARD_PAGE = (1U << 7)
} |
| enum | _PAGE_FLAGS {
PAGE_PRESENT = 1 << 0
, PAGE_RW = 1 << 1
, PAGE_USER = 1 << 2
, PAGE_PWT = 0x8
,
PAGE_PCD = 0x10
, PAGE_ACCESSED = 0x20
, PAGE_DIRTY = 0x40
, PAGE_PS = 0x80
,
PAGE_GLOBAL = 0x100
, PAGE_NX = (1ULL << 63)
} |
| enum | _POOL_TYPE {
NonPagedPool = 0
, PagedPool = 1
, NonPagedPoolCacheAligned = 2
, PagedPoolCacheAligned = 3
,
NonPagedPoolNx = 4
} |
| enum | _FAULT_OPERATION { FaultOpInvalid = -1
, ReadOperation = 0
, WriteOperation = 2
, ExecuteOperation = 10
} |
| enum | _PRIVILEGE_MODE { KernelMode = 0
, UserMode = 1
} |
| enum | _MEMORY_CACHING_TYPE {
MmNonCached = 0
, MmCached
, MmWriteCombined
, MmWriteThrough
,
MmNonCachedUnordered
, MmUSWCCached
, MmHardwareCoherentCached
} |
| enum | _SYSTEM_PHASE_ROUTINE { SYSTEM_PHASE_INITIALIZE_ALL = 1
, SYSTEM_PHASE_INITIALIZE_PAT_ONLY = 2
} |
|
| | VALIDATE_SIZE (MTE_HEADER, 128) |
| uint64_t * | pml4_from_recursive (void) |
| FORCEINLINE void * | kmemset (void *dest, int64_t val, uint64_t len) |
| FORCEINLINE void * | kmemcpy (void *dest, const void *src, size_t len) |
| FORCEINLINE int | kmemcmp (const void *s1, const void *s2, size_t n) |
| FORCEINLINE uint64_t | MiCacheToFlags (MEMORY_CACHING_TYPE type) |
| FORCEINLINE FAULT_OPERATION | MiRetrieveOperationFromErrorCode (uint64_t ErrorCode) |
| FORCEINLINE uint64_t | MiRetrieveLastFaultyAddress (void) |
| FORCEINLINE void | MiAtomicExchangePte (PMMPTE PtePtr, uint64_t NewPteValue) |
| FORCEINLINE bool | MiIsValidPfn (IN PAGE_INDEX Pfn) |
| MTSTATUS | MiInitializePfnDatabase (IN PBOOT_INFO BootInfo) |
| MUST_USE_RESULT HOT PAGE_INDEX | MiRequestPhysicalPage (IN PFN_STATE ListType) |
| bool | MiIsWithinBoundsOfReleasePhysicalPage (void *VirtualAddress) |
| void | MiReleasePhysicalPage (IN PAGE_INDEX PfnIndex) |
| void | MiUnlinkPageFromList (PPFN_ENTRY pfn) |
| void | MiInvalidateTlbForVa (IN void *VirtualAddress) |
| void | MiReloadTLBs (void) |
| PMMPTE | MiGetPml4ePointer (IN uintptr_t va) |
| PMMPTE | MiGetPdptePointer (IN uintptr_t va) |
| PMMPTE | MiGetPdePointer (IN uintptr_t va) |
| PMMPTE | MiGetPtePointer (IN uintptr_t va) |
| uintptr_t | MiTranslatePteToVa (IN PMMPTE pte) |
| PAGE_INDEX | MiTranslatePteToPfn (IN PMMPTE pte) |
| bool | MiAtomicSetTransitionPte (IN PMMPTE Pte, IN PAGE_INDEX Pfn) |
| uintptr_t | MiTranslateVirtualToPhysical (IN void *VirtualAddress) |
| void | MiUnmapPte (IN PMMPTE pte) |
| bool | MmIsAddressPresent (IN uintptr_t VirtualAddress) |
| MUST_USE_RESULT void * | MiMapPageInHyperspace (IN uint64_t PfnIndex, OUT PIRQL OldIrql) |
| void | MiUnmapHyperSpaceMap (IN IRQL OldIrql) |
| MTSTATUS | MiInitializePoolSystem (void) |
| MUST_USE_RESULT HOT void * | MmAllocatePoolWithTag (IN enum _POOL_TYPE PoolType, IN size_t NumberOfBytes, IN uint32_t Tag) |
| void | MmFreePool (IN void *buf) |
| MUST_USE_RESULT void * | MiCreateKernelStack (IN bool LargeStack) |
| void | MiFreeKernelStack (IN void *AllocatedStackTop, IN bool LargeStack) |
| MTSTATUS | MmCreateProcessAddressSpace (OUT void **DirectoryTable) |
| MTSTATUS | MmDeleteProcessAddressSpace (IN PEPROCESS Process, IN uintptr_t PageDirectoryPhysical) |
| MTSTATUS | MmCreateUserStack (IN PEPROCESS Process, OUT void **OutStackTop, _In_Opt size_t StackReserveSize) |
| MTSTATUS | MmCreatePeb (IN PEPROCESS Process, OUT void **OutPeb, OUT void **OutBasicMtdllTypes) |
| MTSTATUS | MmCreateTeb (IN PETHREAD Thread, OUT void **OutTeb) |
| MTSTATUS | MmAllocateVirtualMemory (IN PEPROCESS Process, _In_Opt _Out_Opt void **BaseAddress, IN size_t NumberOfBytes, IN VAD_FLAGS VadFlags) |
| MTSTATUS | MmFreeVirtualMemory (IN PEPROCESS Process, IN void *BaseAddress) |
| MUST_USE_RESULT PMMVAD | MiFindVad (IN PEPROCESS Process, IN uintptr_t VirtualAddress) |
| MUST_USE_RESULT uintptr_t | MmFindFreeAddressSpace (IN PEPROCESS Process, IN size_t NumberOfBytes, IN uintptr_t SearchStart, IN uintptr_t SearchEnd) |
| MUST_USE_RESULT MTSTATUS | MmIsAddressRangeFree (PEPROCESS Process, uintptr_t StartVa, uintptr_t EndVa) |
| bool | MiInitializePoolVaSpace (void) |
| MUST_USE_RESULT uintptr_t | MiAllocatePoolVa (IN POOL_TYPE PoolType, IN size_t NumberOfBytes) |
| void | MiFreePoolVaContiguous (IN uintptr_t va, IN size_t NumberOfBytes, IN POOL_TYPE PoolType) |
| MTSTATUS | MmAccessFault (IN uint64_t FaultBits, IN uint64_t VirtualAddress, IN PRIVILEGE_MODE PreviousMode, IN PTRAP_FRAME TrapFrame) |
| MUST_USE_RESULT bool | MmInvalidAccessAllowed (void) |
| bool | MiCheckForContigiousMemory (IN void *StartAddress, IN size_t NumberOfBytes) |
| MUST_USE_RESULT void * | MmAllocateContigiousMemory (IN size_t NumberOfBytes, IN uint64_t HighestAcceptableAddress) |
| void | MmFreeContigiousMemory (IN void *BaseAddress, IN size_t NumberOfBytes) |
| MUST_USE_RESULT void * | MmMapIoSpace (IN uintptr_t PhysicalAddress, IN size_t NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType) |
| void | MmUnmapIoSpace (IN void *VirtualAddress, IN size_t NumberOfBytes) |
| bool | MmInitSystem (IN uint8_t Phase, IN PBOOT_INFO BootInformation) |
| void | MiMoveUefiDataToHigherHalf (IN PBOOT_INFO BootInfo) |
| MTSTATUS | MmInitSections (void) |
| MTSTATUS | MmCreateSection (OUT PHANDLE SectionHandle, IN struct _FILE_OBJECT *FileObject) |
| MTSTATUS | MmMapViewOfSection (IN HANDLE SectionHandle, IN PEPROCESS Process, OUT void **EntryPointAddress, OUT void **BaseAddress) |
| void | MmpDeleteSection (void *Object) |