15#define MODULE_INVOLVED_IN_ARM3
20#define HYDRA_PROCESS (PEPROCESS)1
35 PVOID StackBase, DeallocationStack, NextStackAddress;
40 if (CurrentThread->AddressSpaceOwner == 1)
43 DPRINT1(
"Process owns address space lock\n");
52 DPRINT1(
"Process is attached\n");
60 DPRINT(
"Handling guard page fault with Stacks Addresses 0x%p and 0x%p, guarantee: %lx\n",
61 StackBase, DeallocationStack, GuaranteedSize);
64 ASSERT(GuaranteedSize == 0);
73 DPRINT1(
"Faulting address outside of stack bounds. Address=%p, StackBase=%p, DeallocationStack=%p\n",
74 Address, StackBase, DeallocationStack);
85 DPRINT1(
"Close to our death...\n");
104 DPRINT1(
"Failed to allocate memory\n");
143 #define _BYTE_MASK(Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7) \
144 (Bit0) | ((Bit1) << 1) | ((Bit2) << 2) | ((Bit3) << 3) | \
145 ((Bit4) << 4) | ((Bit5) << 5) | ((Bit6) << 6) | ((Bit7) << 7)
146 static const UCHAR AccessAllowedMask[2][2] =
162 return (AccessAllowedMask[
Write != 0][
Execute != 0] >> ProtectionMask) & 1;
188 if (StoreInstruction)
224 TempPte.u.Soft.Protection = ProtectionMask & ~MM_GUARDPAGE;
303 ASSERT(PointerPte <= Vad->LastContiguousPte);
336#if (_MI_PAGING_LEVELS == 2)
344 PVOID SessionAddress;
355 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for PTE %p\n",
377 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for PTE %p, %p\n",
378 PointerPde->
u.
Long, SessionAddress);
391 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for VA %p\n",
407 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for VA %p, %p\n",
537 const VOID* SrcAddress;
606 DPRINT(
"ARM3 Demand Zero Page Fault Handler for address: %p in process: %p\n",
653 ASSERT(PointerPte->u.Hard.Valid == 0);
667 if (
Color != 0xFFFFFFFF)
671 if (!PageFrameNumber)
718 if (NeedZero)
MiZeroPfn(PageFrameNumber);
758 DPRINT(
"Demand zero page has now been paged in\n");
773 PMMPTE OriginalPte, PageTablePte;
777 BOOLEAN OriginalProtection, DirtyPage;
781 ASSERT(PointerProtoPte->u.Hard.Valid == 1);
799 Protection = PointerPte->u.Soft.Protection;
802 OriginalProtection =
FALSE;
811 OriginalProtection =
TRUE;
817 StoreInstruction = 0;
836 ASSERT((*LockedProtoPfn)->u3.e2.ReferenceCount >= 1);
838 *LockedProtoPfn =
NULL;
845 Protection &= ~MM_PROTECT_SPECIAL;
988 PMMPTE PointerToPteForProtoPage;
989 DPRINT(
"Transition fault on 0x%p with PTE 0x%p in process %s\n",
990 FaultingAddress, PointerPte, CurrentProcess->ImageFileName);
1001 (
TempPte.u.Soft.Prototype == 0) &&
1002 (
TempPte.u.Soft.Transition == 1));
1006 DPRINT(
"Transition PFN: %lx\n", PageFrameIndex);
1019 DPRINT1(
"The page is currently in a page transition !\n");
1020 *InPageBlock = &Pfn1->
u1.
Event;
1023 DPRINT1(
"And this if for this particular PTE.\n");
1040 DPRINT(
"Transition in active list\n");
1049 DPRINT(
"Transition page in free/zero list\n");
1069 TempPte = *PointerToPteForProtoPage;
1073 DPRINT1(
"Double transition fault not yet supported\n");
1079 ASSERT(PointerPte->u.Hard.Valid == 0);
1080 ASSERT(PointerPte->u.Trans.Prototype == 0);
1081 ASSERT(PointerPte->u.Trans.Transition == 1);
1082 TempPte.u.Long = (PointerPte->u.Long & ~0xFFF) |
1130 ASSERT(PointerPte->u.Hard.Valid == 0);
1131 ASSERT(PointerPte->u.Soft.Prototype == 1);
1158 DPRINT1(
"Access on reserved section?\n");
1167 PteContents = *PointerPte;
1172 Protection =
TempPte.u.Soft.Protection;
1195 PFN_NUMBER PageFrameIndex, ProtoPageFrameIndex;
1235 MiCopyPfn(PageFrameIndex, ProtoPageFrameIndex);
1245 Protection &= ~MM_WRITECOPY;
1273 if (
TempPte.u.Soft.Transition == 1)
1298 if (TrapInformation)
1308 ASSERT(PointerPte->u.Hard.Valid == 0);
1335 DPRINT(
"ARM3 Page Fault Dispatcher for address: %p in process: %p\n",
1355 if (PointerProtoPte)
1365 LockIrql = MiAcquirePfnLock();
1372 else if (PointerPte->u.Hard.Valid == 1)
1404 !(Vad->u2.VadFlags2.ExtendableFile))
1408 DPRINT(
"Should cluster fault, but won't\n");
1416 LockIrql = MiAcquirePfnLock();
1435 else if ((
TempPte.u.Soft.Prototype == 0) &&
1436 (
TempPte.u.Soft.Transition == 1))
1440 DPRINT(
"oooh, shiny, a soft fault! 0x%lx\n", PageFrameIndex);
1459 ASSERT(PointerProtoPte->u.Hard.Valid == 0);
1460 ASSERT(PointerProtoPte->u.Trans.Prototype == 0);
1461 ASSERT(PointerProtoPte->u.Trans.Transition == 1);
1462 TempPte.u.Long = (PointerProtoPte->u.Long & ~0xFFF) |
1483 ASSERT(PointerPte->u.Hard.Valid == 0);
1492 if (++ProcessedPtes == PteCount)
1518 ASSERT(ProcessedPtes == 0);
1531 ASSERT(PointerPte->u.Hard.Valid == 0);
1572 if (
TempPte.u.Soft.Transition)
1579 LockIrql = MiAcquirePfnLock();
1586 if (InPageBlock !=
NULL)
1590 PreviousPageEvent = *InPageBlock;
1591 *InPageBlock = &CurrentPageEvent;
1595 MiReleasePfnLock(LockIrql);
1597 if (InPageBlock !=
NULL)
1602 if (PreviousPageEvent)
1615 if (
TempPte.u.Soft.PageFileHigh != 0)
1618 LockIrql = MiAcquirePfnLock();
1624 MiReleasePfnLock(LockIrql);
1657 if (TrapInformation)
1688#if (_MI_PAGING_LEVELS >= 3)
1690#if (_MI_PAGING_LEVELS == 4)
1699 ULONG ProtectionCode;
1710#if (_MI_PAGING_LEVELS < 3)
1727 DbgPrint(
"MM:***PAGE FAULT AT IRQL > 1 Va %p, IRQL %lx\n",
1730 if (TrapInformation)
1735 DbgPrint(
"MM:***EAX %p, ECX %p EDX %p\n", TrapFrame->
Eax, TrapFrame->
Ecx, TrapFrame->
Edx);
1736 DbgPrint(
"MM:***EBX %p, ESI %p EDI %p\n", TrapFrame->
Ebx, TrapFrame->
Esi, TrapFrame->
Edi);
1737#elif defined(_M_AMD64)
1739 DbgPrint(
"MM:***RAX %p, RCX %p RDX %p\n", TrapFrame->
Rax, TrapFrame->
Rcx, TrapFrame->
Rdx);
1740 DbgPrint(
"MM:***RBX %p, RSI %p RDI %p\n", TrapFrame->
Rbx, TrapFrame->
Rsi, TrapFrame->
Rdi);
1741#elif defined(_M_ARM)
1743 DbgPrint(
"MM:***R0 %p, R1 %p R2 %p, R3 %p\n", TrapFrame->
R0, TrapFrame->
R1, TrapFrame->
R2, TrapFrame->
R3);
1744 DbgPrint(
"MM:***R11 %p, R12 %p SP %p, LR %p\n", TrapFrame->
R11, TrapFrame->
R12, TrapFrame->
Sp, TrapFrame->
Lr);
1761 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1784#if (_MI_PAGING_LEVELS == 2)
1818 if (!IsSessionAddress)
1830 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1859#if (_MI_PAGING_LEVELS == 2)
1877_WARN(
"Session space stuff is not implemented yet!")
1884#if (_MI_PAGING_LEVELS < 3)
1896 if (!IsSessionAddress)
1900 CurrentProcess =
NULL;
1942 if (!(
TempPte.u.Long & PTE_READWRITE) &&
1947 ASSERT(!IsSessionAddress);
1970 if ((IsSessionAddress) &&
2023 if ((IsSessionAddress) &&
2064 !(IsSessionAddress) &&
2110#if (_MI_PAGING_LEVELS == 4)
2140#if (_MI_PAGING_LEVELS >= 3)
2183 UserPdeFault =
TRUE;
2193#if (_MI_PAGING_LEVELS == 2)
2211#if _MI_PAGING_LEVELS >= 3
2216 UserPdeFault =
FALSE;
2218 if (TrapInformation)
2245 PFN_NUMBER PageFrameIndex, OldPageFrameIndex;
2248 LockIrql = MiAcquirePfnLock();
2259 MiCopyPfn(PageFrameIndex, OldPageFrameIndex);
2272 TempPte.u.Hard.CopyOnWrite = 0;
2276 MiReleasePfnLock(LockIrql);
2319 if (TrapInformation)
2337#if (_MI_PAGING_LEVELS == 2)
2373 TempPte.u.Soft.Protection = ProtectionCode & ~MM_GUARDPAGE;
2378 ASSERT(CurrentThread->ApcNeeded == 0);
2396 _WARN(
"This is probably completely broken!");
2405 TempPte.u.Soft.Protection = ProtectionCode;
2420 if (!PageFrameIndex)
2481 ASSERT(ProtectionCode != 0x100);
2485 TempPte.u.Soft.Protection = ProtectionCode;
2523 ProtectionCode = 0x100;
2531 if (ProtectionCode != 0x100)
2543 ASSERT(CurrentThread->ApcNeeded == 0);
2584 *ExecuteOptions = 0;
2632 DPRINT1(
"Invalid no-execute options\n");
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)
#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)
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::@1772::@1778 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
_In_ KPROCESSOR_MODE PreviousMode