57 size_t TotalSize = StackSize + GuardSize;
62 if (!BaseVa)
return NULL;
65 uintptr_t MapStartVa = BaseVa + GuardSize;
67 size_t Iterations = 0;
70 for (
size_t i = 0; i < PagesToMap; i++) {
110 if (failure)
goto failure_cleanup;
123 return (
void*)(BaseVa + TotalSize);
127 for (
size_t j = 0; j < Iterations; j++) {
131 if (pte && pte->Hard.Present) {
143 assert(
false,
"This function is currently a Must-Succeed.");
149 IN void* AllocatedStackTop,
171 gop_printf(
COLOR_PINK,
"**Reached MiFreeKernelStack | LargeStack: %s | AllocatedStackTop: %p**\n", (LargeStack ?
"True" :
"False"), AllocatedStackTop);
175 size_t TotalSize = StackSize + GuardSize;
183 for (
size_t i = 0; i < PagesToUnMap; i++) {
203 uintptr_t BaseVa = (uintptr_t)AllocatedStackTop - TotalSize;
221 OUT void** DirectoryTable
245 uint64_t physicalAddress;
273 pml4Base[i] = currentPml4[i];
297 *DirectoryTable = (
void*)physicalAddress;
NORETURN void MeBugCheckEx(IN enum _BUGCHECK_CODES BugCheckCode, IN void *BugCheckParameter1, IN void *BugCheckParameter2, IN void *BugCheckParameter3, IN void *BugCheckParameter4)
void gop_printf(uint32_t color, const char *fmt,...)
void * MiMapPageInHyperspace(IN uint64_t PfnIndex, OUT PIRQL OldIrql)
void MiUnmapHyperSpaceMap(IN IRQL OldIrql)
uint64_t * pml4_from_recursive(void)
PAGE_INDEX MiTranslatePteToPfn(IN PMMPTE pte)
PMMPTE MiGetPtePointer(IN uintptr_t va)
void MiInvalidateTlbForVa(IN void *VirtualAddress)
void MiUnmapPte(IN PMMPTE pte)
@ MANUALLY_INITIATED_CRASH
#define MI_LARGE_STACK_SIZE
#define PPFN_TO_PHYSICAL_ADDRESS(PPFN)
FORCEINLINE void * kmemset(void *dest, int64_t val, uint64_t len)
#define PhysicalMemoryOffset
#define BYTES_TO_PAGES(Bytes)
#define INDEX_TO_PPFN(Index)
#define MI_WRITE_PTE(_PtePointer, _Va, _Pa, _Flags)
#define MI_GUARD_PAGE_PROTECTION
void * MiCreateKernelStack(IN bool LargeStack)
MTSTATUS MmCreateProcessAddressSpace(OUT void **DirectoryTable)
void MiFreeKernelStack(IN void *AllocatedStackTop, IN bool LargeStack)
#define MT_GENERAL_FAILURE
PAGE_INDEX MiRequestPhysicalPage(IN PFN_STATE ListType)
void MiReleasePhysicalPage(IN PAGE_INDEX PfnIndex)
struct _MMPTE::@172372265215056352375070220246156106027174106113::@200357034104227323320222006243127050212100105247 Hard
struct _MMPTE::@172372265215056352375070220246156106027174106113::@277354034164206104264133322054061025100052052376 Soft
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)