15#define MODULE_INVOLVED_IN_ARM3
24#define HYDRA_PROCESS (PEPROCESS)1
39 PVOID StackBase, DeallocationStack, NextStackAddress;
44 if (CurrentThread->AddressSpaceOwner == 1)
47 DPRINT1(
"Process owns address space lock\n");
56 DPRINT1(
"Process is attached\n");
64 DPRINT(
"Handling guard page fault with Stacks Addresses 0x%p and 0x%p, guarantee: %lx\n",
65 StackBase, DeallocationStack, GuaranteedSize);
68 ASSERT(GuaranteedSize == 0);
77 DPRINT1(
"Faulting address outside of stack bounds. Address=%p, StackBase=%p, DeallocationStack=%p\n",
78 Address, StackBase, DeallocationStack);
89 DPRINT1(
"Close to our death...\n");
108 DPRINT1(
"Failed to allocate memory\n");
147 #define _BYTE_MASK(Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7) \
148 (Bit0) | ((Bit1) << 1) | ((Bit2) << 2) | ((Bit3) << 3) | \
149 ((Bit4) << 4) | ((Bit5) << 5) | ((Bit6) << 6) | ((Bit7) << 7)
150 static const UCHAR AccessAllowedMask[2][2] =
166 return (AccessAllowedMask[
Write != 0][
Execute != 0] >> ProtectionMask) & 1;
192 if (StoreInstruction)
228 TempPte.u.Soft.Protection = ProtectionMask & ~MM_GUARDPAGE;
307 ASSERT(PointerPte <= Vad->LastContiguousPte);
340#if (_MI_PAGING_LEVELS == 2)
348 PVOID SessionAddress;
359 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for PTE %p\n",
381 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for PTE %p, %p\n",
382 PointerPde->
u.
Long, SessionAddress);
395 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for VA %p\n",
411 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for VA %p, %p\n",
541 const VOID* SrcAddress;
610 DPRINT(
"ARM3 Demand Zero Page Fault Handler for address: %p in process: %p\n",
657 ASSERT(PointerPte->u.Hard.Valid == 0);
671 if (
Color != 0xFFFFFFFF)
675 if (!PageFrameNumber)
705 if (PageFrameNumber == 0)
728 if (NeedZero)
MiZeroPfn(PageFrameNumber);
768 DPRINT(
"Demand zero page has now been paged in\n");
783 PMMPTE OriginalPte, PageTablePte;
787 BOOLEAN OriginalProtection, DirtyPage;
791 ASSERT(PointerProtoPte->u.Hard.Valid == 1);
809 Protection = PointerPte->u.Soft.Protection;
812 OriginalProtection =
FALSE;
821 OriginalProtection =
TRUE;
827 StoreInstruction = 0;
846 ASSERT((*LockedProtoPfn)->u3.e2.ReferenceCount >= 1);
848 *LockedProtoPfn =
NULL;
855 Protection &= ~MM_PROTECT_SPECIAL;
1002 PMMPTE PointerToPteForProtoPage;
1003 DPRINT(
"Transition fault on 0x%p with PTE 0x%p in process %s\n",
1004 FaultingAddress, PointerPte, CurrentProcess->ImageFileName);
1015 (
TempPte.u.Soft.Prototype == 0) &&
1016 (
TempPte.u.Soft.Transition == 1));
1020 DPRINT(
"Transition PFN: %lx\n", PageFrameIndex);
1033 DPRINT1(
"The page is currently in a page transition !\n");
1034 *InPageBlock = &Pfn1->
u1.
Event;
1037 DPRINT1(
"And this if for this particular PTE.\n");
1054 DPRINT(
"Transition in active list\n");
1063 DPRINT(
"Transition page in free/zero list\n");
1083 TempPte = *PointerToPteForProtoPage;
1087 DPRINT1(
"Double transition fault not yet supported\n");
1093 ASSERT(PointerPte->u.Hard.Valid == 0);
1094 ASSERT(PointerPte->u.Trans.Prototype == 0);
1095 ASSERT(PointerPte->u.Trans.Transition == 1);
1096 TempPte.u.Long = (PointerPte->u.Long & ~0xFFF) |
1144 ASSERT(PointerPte->u.Hard.Valid == 0);
1145 ASSERT(PointerPte->u.Soft.Prototype == 1);
1172 DPRINT1(
"Access on reserved section?\n");
1181 PteContents = *PointerPte;
1186 Protection =
TempPte.u.Soft.Protection;
1209 PFN_NUMBER PageFrameIndex, ProtoPageFrameIndex;
1247 if (PageFrameIndex == 0)
1254 MiCopyPfn(PageFrameIndex, ProtoPageFrameIndex);
1264 Protection &= ~MM_WRITECOPY;
1292 if (
TempPte.u.Soft.Transition == 1)
1317 if (TrapInformation)
1327 ASSERT(PointerPte->u.Hard.Valid == 0);
1354 DPRINT(
"ARM3 Page Fault Dispatcher for address: %p in process: %p\n",
1374 if (PointerProtoPte)
1384 LockIrql = MiAcquirePfnLock();
1391 else if (PointerPte->u.Hard.Valid == 1)
1423 !(Vad->u2.VadFlags2.ExtendableFile))
1427 DPRINT(
"Should cluster fault, but won't\n");
1435 LockIrql = MiAcquirePfnLock();
1454 else if ((
TempPte.u.Soft.Prototype == 0) &&
1455 (
TempPte.u.Soft.Transition == 1))
1459 DPRINT(
"oooh, shiny, a soft fault! 0x%lx\n", PageFrameIndex);
1478 ASSERT(PointerProtoPte->u.Hard.Valid == 0);
1479 ASSERT(PointerProtoPte->u.Trans.Prototype == 0);
1480 ASSERT(PointerProtoPte->u.Trans.Transition == 1);
1481 TempPte.u.Long = (PointerProtoPte->u.Long & ~0xFFF) |
1502 ASSERT(PointerPte->u.Hard.Valid == 0);
1511 if (++ProcessedPtes == PteCount)
1537 ASSERT(ProcessedPtes == 0);
1550 ASSERT(PointerPte->u.Hard.Valid == 0);
1591 if (
TempPte.u.Soft.Transition)
1598 LockIrql = MiAcquirePfnLock();
1605 if (InPageBlock !=
NULL)
1609 PreviousPageEvent = *InPageBlock;
1610 *InPageBlock = &CurrentPageEvent;
1614 MiReleasePfnLock(LockIrql);
1616 if (InPageBlock !=
NULL)
1621 if (PreviousPageEvent)
1634 if (
TempPte.u.Soft.PageFileHigh != 0)
1637 LockIrql = MiAcquirePfnLock();
1643 MiReleasePfnLock(LockIrql);
1676 if (TrapInformation)
1707#if (_MI_PAGING_LEVELS >= 3)
1709#if (_MI_PAGING_LEVELS == 4)
1718 ULONG ProtectionCode;
1729#if (_MI_PAGING_LEVELS < 3)
1746 DbgPrint(
"MM:***PAGE FAULT AT IRQL > 1 Va %p, IRQL %lx\n",
1749 if (TrapInformation)
1754 DbgPrint(
"MM:***EAX %p, ECX %p EDX %p\n", TrapFrame->
Eax, TrapFrame->
Ecx, TrapFrame->
Edx);
1755 DbgPrint(
"MM:***EBX %p, ESI %p EDI %p\n", TrapFrame->
Ebx, TrapFrame->
Esi, TrapFrame->
Edi);
1756#elif defined(_M_AMD64)
1758 DbgPrint(
"MM:***RAX %p, RCX %p RDX %p\n", TrapFrame->
Rax, TrapFrame->
Rcx, TrapFrame->
Rdx);
1759 DbgPrint(
"MM:***RBX %p, RSI %p RDI %p\n", TrapFrame->
Rbx, TrapFrame->
Rsi, TrapFrame->
Rdi);
1760#elif defined(_M_ARM)
1762 DbgPrint(
"MM:***R0 %p, R1 %p R2 %p, R3 %p\n", TrapFrame->
R0, TrapFrame->
R1, TrapFrame->
R2, TrapFrame->
R3);
1763 DbgPrint(
"MM:***R11 %p, R12 %p SP %p, LR %p\n", TrapFrame->
R11, TrapFrame->
R12, TrapFrame->
Sp, TrapFrame->
Lr);
1780 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1803#if (_MI_PAGING_LEVELS == 2)
1837 if (!IsSessionAddress)
1849 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1878#if (_MI_PAGING_LEVELS == 2)
1896_WARN(
"Session space stuff is not implemented yet!")
1903#if (_MI_PAGING_LEVELS < 3)
1915 if (!IsSessionAddress)
1919 CurrentProcess =
NULL;
1961 if (!(
TempPte.u.Long & PTE_READWRITE) &&
1966 ASSERT(!IsSessionAddress);
1989 if ((IsSessionAddress) &&
2042 if ((IsSessionAddress) &&
2083 !(IsSessionAddress) &&
2135#if (_MI_PAGING_LEVELS == 4)
2169#if (_MI_PAGING_LEVELS >= 3)
2216 UserPdeFault =
TRUE;
2226#if (_MI_PAGING_LEVELS == 2)
2249#if _MI_PAGING_LEVELS >= 3
2254 UserPdeFault =
FALSE;
2256 if (TrapInformation)
2283 PFN_NUMBER PageFrameIndex, OldPageFrameIndex;
2286 LockIrql = MiAcquirePfnLock();
2295 if (PageFrameIndex == 0)
2297 MiReleasePfnLock(LockIrql);
2303 MiCopyPfn(PageFrameIndex, OldPageFrameIndex);
2316 TempPte.u.Hard.CopyOnWrite = 0;
2320 MiReleasePfnLock(LockIrql);
2336#if _MI_HAS_NO_EXECUTE
2379 if (TrapInformation)
2397#if (_MI_PAGING_LEVELS == 2)
2433 TempPte.u.Soft.Protection = ProtectionCode & ~MM_GUARDPAGE;
2438 ASSERT(CurrentThread->ApcNeeded == 0);
2456 _WARN(
"This is probably completely broken!");
2465 TempPte.u.Soft.Protection = ProtectionCode;
2480 if (!PageFrameIndex)
2488 if (PageFrameIndex == 0)
2546 ASSERT(ProtectionCode != 0x100);
2550 TempPte.u.Soft.Protection = ProtectionCode;
2588 ProtectionCode = 0x100;
2596 if (ProtectionCode != 0x100)
2608 ASSERT(CurrentThread->ApcNeeded == 0);
2658 *ExecuteOptions = 0;
2706 DPRINT1(
"Invalid no-execute options\n");
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
HARDWARE_PTE_ARMV6 TempPte
HARDWARE_PDE_ARMV6 TempPde
#define InterlockedIncrement
#define InterlockedExchange
#define MM_HIGHEST_USER_ADDRESS
static INT Execute(LPTSTR Full, LPTSTR First, LPTSTR Rest, PARSED_COMMAND *Cmd)
#define NT_SUCCESS(StatCode)
#define IsListEmpty(ListHead)
#define PsGetCurrentThread()
#define KeRaiseIrql(irql, oldIrql)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeLowerIrql(oldIrql)
#define KeSetEvent(pEvt, foo, foo2)
#define KeGetCurrentIrql()
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
#define FLG_DISABLE_STACK_EXTENSION
NTSYSAPI void WINAPI DbgBreakPoint(void)
#define InterlockedIncrement16
#define InterlockedExchangeAddSizeT(a, b)
FORCEINLINE VOID KiReleaseProcessLock(IN PKLOCK_QUEUE_HANDLE Handle)
FORCEINLINE VOID KiAcquireProcessLockRaiseToSynch(IN PKPROCESS Process, IN PKLOCK_QUEUE_HANDLE Handle)
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
PMMPTE MmSharedUserDataPte
#define MI_IS_SYSTEM_PAGE_TABLE_ADDRESS(Address)
FORCEINLINE BOOLEAN MI_IS_PHYSICAL_ADDRESS(IN PVOID Address)
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
FORCEINLINE VOID MiLockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
#define MI_IS_SESSION_IMAGE_ADDRESS(Address)
VOID NTAPI MiDeletePte(IN PMMPTE PointerPte, IN PVOID VirtualAddress, IN PEPROCESS CurrentProcess, IN PMMPTE PrototypePte)
PMM_SESSION_SPACE MmSessionSpace
FORCEINLINE VOID MiReferenceUsedPageAndBumpLockCount(IN PMMPFN Pfn1)
#define MI_IS_SESSION_ADDRESS(Address)
BOOLEAN MmProtectFreedNonPagedPool
#define MI_GET_NEXT_COLOR()
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
#define MM_EXECUTE_READWRITE
FORCEINLINE BOOLEAN MiIsUserPte(PVOID Address)
MM_PAGED_POOL_INFO MmPagedPoolInfo
#define MI_IS_SESSION_PTE(Pte)
#define MI_IS_PAGE_TABLE_ADDRESS(Address)
#define MM_INVALID_PROTECTION
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE VOID MiReferenceUnusedPageAndBumpLockCount(IN PMMPFN Pfn1)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
FORCEINLINE VOID MiDereferencePfnAndDropLockCount(IN PMMPFN Pfn1)
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
FORCEINLINE VOID MI_WRITE_INVALID_PDE(IN PMMPDE PointerPde, IN MMPDE InvalidPde)
#define MM_PROTECT_SPECIAL
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
FORCEINLINE BOOLEAN MiIsUserPde(PVOID Address)
FORCEINLINE VOID MI_UPDATE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
#define MI_PTE_LOOKUP_NEEDED
FORCEINLINE VOID MI_MAKE_TRANSITION_PTE(_Out_ PMMPTE NewPte, _In_ PFN_NUMBER Page, _In_ ULONG Protection)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
FORCEINLINE VOID MiDropLockCount(IN PMMPFN Pfn1)
FORCEINLINE ULONG_PTR MiDetermineUserGlobalPteMask(IN PVOID PointerPte)
#define MI_IS_PFN_DELETED(x)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
#define MI_IS_PAGE_TABLE_OR_HYPER_ADDRESS(Address)
FORCEINLINE USHORT MiIncrementPageTableReferences(IN PVOID Address)
#define MI_GET_NEXT_PROCESS_COLOR(x)
#define MM_PROTECT_ACCESS
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
FORCEINLINE PFN_NUMBER MiRemoveZeroPageSafe(IN ULONG Color)
#define MiAddressToPte(x)
#define MiAddressToPde(x)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define MM_SHARED_USER_DATA_VA
#define MEM_EXECUTE_OPTION_DISABLE
#define MEM_EXECUTE_OPTION_PERMANENT
#define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE
#define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE
@ VadDevicePhysicalMemory
#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION
#define MEM_EXECUTE_OPTION_ENABLE
#define MEM_EXECUTE_OPTION_VALID_FLAGS
#define NtCurrentProcess()
struct _EPROCESS * PEPROCESS
#define MI_IS_PAGE_EXECUTABLE(x)
#define MI_IS_PAGE_COPY_ON_WRITE(x)
#define MI_PAGE_WRITE_COMBINED(x)
#define MI_PAGE_DISABLE_CACHE(x)
#define MI_IS_WRITE_ACCESS(FaultCode)
#define MI_IS_PAGE_WRITEABLE(x)
#define MM_PTE_SOFTWARE_PROTECTION_BITS
#define MI_IS_INSTRUCTION_FETCH(FaultCode)
#define MI_IS_NOT_PRESENT_FAULT(FaultCode)
#define MI_MAKE_ACCESSED_PAGE(x)
#define _MI_PAGING_LEVELS
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
#define MiProtoPteToPte(x)
FORCEINLINE PMMPTE MiAddressToPxe(PVOID Address)
#define MI_IS_PAGE_LARGE(x)
#define MmSystemRangeStart
#define MI_MAKE_CLEAN_PAGE(x)
#define MI_PAGE_WRITE_THROUGH(x)
#define MI_MAKE_DIRTY_PAGE(x)
#define MiPteToAddress(_Pte)
VOID FASTCALL KeZeroPages(IN PVOID Address, IN ULONG Size)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
#define MI_SET_PROCESS2(x)
NTSTATUS NTAPI MiReadPageFile(_In_ PFN_NUMBER Page, _In_ ULONG PageFileIndex, _In_ ULONG_PTR PageFileOffset)
#define MI_ASSERT_PFN_LOCK_HELD()
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
PFN_NUMBER MmAvailablePages
#define MI_SET_PROCESS(x)
#define InterlockedExchangePte(PointerPte, Value)
BOOLEAN NTAPI KeAreAllApcsDisabled(VOID)
ULONG MmSizeOfNonPagedPoolInBytes
PVOID MmNonPagedPoolExpansionStart
MMSUPPORT MmSystemCacheWs
PVOID MmNonPagedPoolStart
const ULONG MmProtectToPteMask[32]
#define STATUS_PAGE_FAULT_GUARD_PAGE
#define STATUS_ALREADY_COMMITTED
#define STATUS_STACK_OVERFLOW
#define STATUS_PAGE_FAULT_COPY_ON_WRITE
#define STATUS_PAGE_FAULT_DEMAND_ZERO
#define STATUS_ACCESS_VIOLATION
#define STATUS_IN_PAGE_ERROR
#define STATUS_GUARD_PAGE_VIOLATION
#define STATUS_PAGE_FAULT_TRANSITION
VOID NTAPI MiCopyPfn(_In_ PFN_NUMBER DestPage, _In_ PFN_NUMBER SrcPage)
static NTSTATUS NTAPI MiAccessCheck(IN PMMPTE PointerPte, IN BOOLEAN StoreInstruction, IN KPROCESSOR_MODE PreviousMode, IN ULONG_PTR ProtectionMask, IN PVOID TrapFrame, IN BOOLEAN LockHeld)
static NTSTATUS NTAPI MiResolveDemandZeroFault(IN PVOID Address, IN PMMPTE PointerPte, IN ULONG Protection, IN PEPROCESS Process, IN KIRQL OldIrql)
static NTSTATUS NTAPI MiCompleteProtoPteFault(IN BOOLEAN StoreInstruction, IN PVOID Address, IN PMMPTE PointerPte, IN PMMPTE PointerProtoPte, IN KIRQL OldIrql, IN PMMPFN *LockedProtoPfn)
static NTSTATUS NTAPI MiResolveTransitionFault(IN BOOLEAN StoreInstruction, IN PVOID FaultingAddress, IN PMMPTE PointerPte, IN PEPROCESS CurrentProcess, IN KIRQL OldIrql, OUT PKEVENT **InPageBlock)
static PMMPTE NTAPI MiCheckVirtualAddress(IN PVOID VirtualAddress, OUT PULONG ProtectCode, OUT PMMVAD *ProtoVad)
NTSTATUS NTAPI MmArmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
VOID NTAPI MiZeroPfn(IN PFN_NUMBER PageFrameNumber)
FORCEINLINE BOOLEAN MiIsAccessAllowed(_In_ ULONG ProtectionMask, _In_ BOOLEAN Write, _In_ BOOLEAN Execute)
VOID NTAPI MmRebalanceMemoryConsumersAndWait(VOID)
static NTSTATUS NTAPI MiResolvePageFileFault(_In_ BOOLEAN StoreInstruction, _In_ PVOID FaultingAddress, _In_ PMMPTE PointerPte, _In_ PEPROCESS CurrentProcess, _Inout_ KIRQL *OldIrql)
static NTSTATUS NTAPI MiResolveProtoPteFault(IN BOOLEAN StoreInstruction, IN PVOID Address, IN PMMPTE PointerPte, IN PMMPTE PointerProtoPte, IN OUT PMMPFN *OutPfn, OUT PVOID *PageFileData, OUT PMMPTE PteValue, IN PEPROCESS Process, IN KIRQL OldIrql, IN PVOID TrapInformation)
NTSTATUS FASTCALL MiCheckPdeForPagedPool(IN PVOID Address)
NTSTATUS NTAPI MmGetExecuteOptions(IN PULONG ExecuteOptions)
#define _BYTE_MASK(Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7)
static NTSTATUS NTAPI MiCheckForUserStackOverflow(IN PVOID Address, IN PVOID TrapInformation)
NTSTATUS NTAPI MiDispatchFault(IN ULONG FaultCode, IN PVOID Address, IN PMMPTE PointerPte, IN PMMPTE PointerProtoPte, IN BOOLEAN Recursive, IN PEPROCESS Process, IN PVOID TrapInformation, IN PMMVAD Vad)
BOOLEAN NTAPI KeIsAttachedProcess(VOID)
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
PFN_NUMBER NumberOfPrivatePages
ULONG OwnsSessionWorkingSetExclusive
ULONG OwnsSessionWorkingSetShared
ULONG OwnsSystemWorkingSetShared
ULONG OwnsProcessWorkingSetShared
ULONG OwnsProcessWorkingSetExclusive
ULONG OwnsSystemWorkingSetExclusive
UCHAR DisableThunkEmulation
UCHAR ExecuteDispatchEnable
UCHAR ImageDispatchEnable
struct _MMPFN::@1835::@1841 e2
PMMPTE LastPteForPagedPool
struct _MM_SESSION_SPACE * GlobalVirtualAddress
ULONG GuaranteedStackBytes
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define PsGetCurrentProcess