|
| #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 | 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 | MAX_POOL_DESCRIPTORS 7 |
| #define | _32KB_POOL 1 |
| #define | _64KB_POOL 2 |
| #define | _128KB_POOL 3 |
| #define | _256KB_POOL 4 |
| #define | _512KB_POOL 5 |
| #define | _1024KB_POOL 6 |
| #define | _2048KB_POOL 7 |
| #define | POOL_MIN_ALLOC 32 |
| #define | USER_VA_END 0x00007FFFFFFFFFFF |
| #define | USER_VA_START 0x10000 |
| #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_NONPAGED_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 0x1 |
| #define | PROT_KERNEL_WRITE 0x2 |
| #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 | MmFullBarrier() |
| #define | MmBarrier() |
| #define | MmIsAddressValid(VirtualAddress) |
| #define | PAGE_PAT (1ULL << 7) |
|
| 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)
} |
| 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
, PagedPoolNx = 5
} |
| 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
} |
|
| 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) |
| void | MiReloadTLBs (void) |
| 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) |
| void | MiInvalidateTlbForVa (IN void *VirtualAddress) |
| FORCEINLINE bool | MiIsValidPfn (IN PAGE_INDEX Pfn) |
| MTSTATUS | MiInitializePfnDatabase (IN PBOOT_INFO BootInfo) |
| PAGE_INDEX | MiRequestPhysicalPage (IN PFN_STATE ListType) |
| void | MiReleasePhysicalPage (IN PAGE_INDEX PfnIndex) |
| void | MiUnlinkPageFromList (PPFN_ENTRY pfn) |
| PMMPTE | MiGetPml4ePointer (IN uintptr_t va) |
| PMMPTE | MiGetPdptePointer (IN uintptr_t va) |
| PMMPTE | MiGetPdePointer (IN uintptr_t va) |
| PMMPTE | MiGetPtePointer (IN uintptr_t va) |
| uint64_t | MiTranslatePteToVa (IN PMMPTE pte) |
| PAGE_INDEX | MiTranslatePteToPfn (IN PMMPTE pte) |
| uintptr_t | MiTranslateVirtualToPhysical (IN void *VirtualAddress) |
| void | MiUnmapPte (IN PMMPTE pte) |
| bool | MmIsAddressPresent (IN uintptr_t VirtualAddress) |
| void * | MiMapPageInHyperspace (IN uint64_t PfnIndex, OUT PIRQL OldIrql) |
| void | MiUnmapHyperSpaceMap (IN IRQL OldIrql) |
| MTSTATUS | MiInitializePoolSystem (void) |
| void * | MmAllocatePoolWithTag (IN enum _POOL_TYPE PoolType, IN size_t NumberOfBytes, IN uint32_t Tag) |
| void | MmFreePool (IN void *buf) |
| void * | MiCreateKernelStack (IN bool LargeStack) |
| void | MiFreeKernelStack (IN void *AllocatedStackTop, IN bool LargeStack) |
| MTSTATUS | MmCreateProcessAddressSpace (OUT void **DirectoryTable) |
| 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) |
| PMMVAD | MiFindVad (IN PMMVAD Root, IN uintptr_t VirtualAddress) |
| void | MiMoveUefiDataToHigherHalf (IN PBOOT_INFO BootInfo) |
| uintptr_t | MmFindFreeAddressSpace (IN PEPROCESS Process, IN size_t NumberOfBytes, IN uintptr_t SearchStart, IN uintptr_t SearchEnd) |
| bool | MiInitializePoolVaSpace (void) |
| 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) |
| bool | MmInvalidAccessAllowed (void) |
| bool | MiCheckForContigiousMemory (IN void *StartAddress, IN size_t NumberOfBytes) |
| void * | MmAllocateContigiousMemory (IN size_t NumberOfBytes, IN uint64_t HighestAcceptableAddress) |
| void | MmFreeContigiousMemory (IN void *BaseAddress, IN size_t NumberOfBytes) |
| void * | MmMapIoSpace (IN uintptr_t PhysicalAddress, IN size_t NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType) |
| bool | MmInitSystem (IN uint8_t Phase, IN PBOOT_INFO BootInformation) |