29 IN uint64_t FaultBits,
30 IN uint64_t VirtualAddress,
83 gop_printf(
COLOR_RED,
"Inside MmAccessFault | FaultBits: %llx | VirtualAddress: %p | PreviousMode: %d | TrapFrame->rip: %p | Operation: %d | Irql: %d\n", (
unsigned long long)FaultBits, (
void*)(uintptr_t)VirtualAddress, PreviousMode, (
void*)(uintptr_t)TrapFrame->rip, OperationDone, PreviousIrql);
95 (
void*)VirtualAddress,
97 (
void*)TrapFrame->rip,
141 MMPTE TempPte = *ReferencedPte;
155 (
void*)VirtualAddress,
156 (
void*)ReferencedPte,
166 MMPTE NewPte = TempPte;
179 (
void*)VirtualAddress,
181 (
void*)OperationDone,
182 (
void*)TrapFrame->rip
272 (
void*)VirtualAddress,
274 (
void*)OperationDone,
275 (
void*)TrapFrame->rip
298 MMPTE TempPte = *ReferencedPte;
380 uint64_t AlignedAddress = (uint64_t)
PAGE_ALIGN(VirtualAddress);
381 uint64_t PageOffsetWithinVad = AlignedAddress - (uint64_t)vad->
StartVa;
382 uint64_t ActualFileOffset = vad->
FileOffset + PageOffsetWithinVad;
386 uint64_t FileLength = FileObject->
FileSize;
389 if (ActualFileOffset < FileLength) {
445 (
void*)VirtualAddress,
447 (
void*)TrapFrame->rip,
456 (
void*)VirtualAddress,
458 (
void*)TrapFrame->rip,
467 (
void*)VirtualAddress,
469 (
void*)TrapFrame->rip,
478 (
void*)VirtualAddress,
480 (
void*)TrapFrame->rip,
488 (
void*)VirtualAddress,
490 (
void*)TrapFrame->rip,
NORETURN void MeBugCheckEx(IN enum _BUGCHECK_CODES BugCheckCode, IN void *BugCheckParameter1, IN void *BugCheckParameter2, IN void *BugCheckParameter3, IN void *BugCheckParameter4)
MTSTATUS MmAccessFault(IN uint64_t FaultBits, IN uint64_t VirtualAddress, IN PRIVILEGE_MODE PreviousMode, IN PTRAP_FRAME TrapFrame)
bool MmInvalidAccessAllowed(void)
struct _FILE_OBJECT * PFILE_OBJECT
void gop_printf(uint32_t color, const char *fmt,...)
void * MiMapPageInHyperspace(IN uint64_t PfnIndex, OUT PIRQL OldIrql)
void MiUnmapHyperSpaceMap(IN IRQL OldIrql)
#define UNREFERENCED_PARAMETER(x)
PMMPTE MiGetPdptePointer(IN uintptr_t va)
PMMPTE MiGetPdePointer(IN uintptr_t va)
PMMPTE MiGetPml4ePointer(IN uintptr_t va)
PMMPTE MiGetPtePointer(IN uintptr_t va)
void MiInvalidateTlbForVa(IN void *VirtualAddress)
@ ATTEMPTED_WRITE_TO_READONLY_MEMORY
@ PAGE_FAULT_IN_FREED_NONPAGED_POOL
@ PAGE_FAULT_IN_FREED_PAGED_POOL
@ ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY
FORCEINLINE IRQL MeGetCurrentIrql(void)
#define COLOR_RED
Colors definitions for easier access.
#define MI_IS_CANONICAL_ADDR(va)
FORCEINLINE void MiAtomicExchangePte(PMMPTE PtePtr, uint64_t NewPteValue)
FORCEINLINE bool MiIsValidPfn(IN PAGE_INDEX Pfn)
#define PROT_KERNEL_WRITE
enum _FAULT_OPERATION FAULT_OPERATION
FORCEINLINE FAULT_OPERATION MiRetrieveOperationFromErrorCode(uint64_t ErrorCode)
FORCEINLINE void * kmemcpy(void *dest, const void *src, size_t len)
enum _PRIVILEGE_MODE PRIVILEGE_MODE
#define PPFN_TO_PHYSICAL_ADDRESS(PPFN)
#define PROT_KERNEL_NOEXECUTE
FORCEINLINE void * kmemset(void *dest, int64_t val, uint64_t len)
#define INDEX_TO_PPFN(Index)
#define MI_WRITE_PTE(_PtePointer, _Va, _Pa, _Flags)
struct _PFN_ENTRY * PPFN_ENTRY
#define MM_IS_DEMAND_ZERO_PTE(pte)
#define MI_GUARD_PAGE_PROTECTION
#define MT_FAILURE(Status)
#define MT_ACCESS_VIOLATION
PAGE_INDEX MiRequestPhysicalPage(IN PFN_STATE ListType)
void MiUnlinkPageFromList(PPFN_ENTRY pfn)
MM_PFN_DATABASE PfnDatabase
uintptr_t MmNonPagedPoolEnd
uintptr_t MmNonPagedPoolStart
uintptr_t MmPagedPoolStart
void MmFreePool(IN void *buf)
void * MmAllocatePoolWithTag(IN enum _POOL_TYPE PoolType, IN size_t NumberOfBytes, IN uint32_t Tag)
uintptr_t MmSystemRangeStart
uintptr_t MmHighestUserAddress
FORCEINLINE PEPROCESS PsGetCurrentProcess(void)
void MsAcquireSpinlock(IN PSPINLOCK lock, IN PIRQL OldIrql)
void MsReleaseSpinlock(IN PSPINLOCK lock, IN IRQL OldIrql)
struct _MMPTE::@172372265215056352375070220246156106027174106113::@200357034104227323320222006243127050212100105247 Hard
struct _MMPTE::@172372265215056352375070220246156106027174106113::@277354034164206104264133322054061025100052052376 Soft
struct _FILE_OBJECT * File
union _PFN_ENTRY::@217024126340164016372152071216274230164113211246 Descriptor
struct _PFN_ENTRY::@217024126340164016372152071216274230164113211246::@301110335271023021153236134322146064331241142124 Mapping
PMMVAD MiFindVad(IN PEPROCESS Process, IN uintptr_t VirtualAddress)
MTSTATUS FsReadFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)