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)
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;
988 PMMPTE PointerToPteForProtoPage;
989 DPRINT(
"Transition fault on 0x%p with PTE 0x%p in process %s\n",
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);
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)
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) 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");
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 KeGetCurrentIrql()
#define _BYTE_MASK(Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7)
#define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE
#define MI_IS_PAGE_TABLE_ADDRESS(Address)
#define MM_HIGHEST_USER_ADDRESS
NTSTATUS NTAPI MmArmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
#define MM_INVALID_PROTECTION
#define _MI_PAGING_LEVELS
FORCEINLINE VOID KiAcquireProcessLockRaiseToSynch(IN PKPROCESS Process, IN PKLOCK_QUEUE_HANDLE Handle)
#define MI_IS_NOT_PRESENT_FAULT(FaultCode)
#define MI_PAGE_WRITE_COMBINED(x)
#define MI_ASSERT_PFN_LOCK_HELD()
#define MiAddressToPde(x)
BOOLEAN NTAPI KeAreAllApcsDisabled(VOID)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
FORCEINLINE VOID MiDereferencePfnAndDropLockCount(IN PMMPFN Pfn1)
#define PsGetCurrentThread()
#define MI_MAKE_ACCESSED_PAGE(x)
ULONG OwnsSystemWorkingSetShared
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)
static NTSTATUS NTAPI MiResolvePageFileFault(_In_ BOOLEAN StoreInstruction, _In_ PVOID FaultingAddress, _In_ PMMPTE PointerPte, _In_ PEPROCESS CurrentProcess, _Inout_ KIRQL *OldIrql)
#define STATUS_INVALID_PARAMETER
PMMPTE NTAPI MiReserveSystemPtes(IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
#define MI_IS_SESSION_ADDRESS(Address)
#define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
NTSTATUS NTAPI MiReadPageFile(_In_ PFN_NUMBER Page, _In_ ULONG PageFileIndex, _In_ ULONG_PTR PageFileOffset)
#define MEM_EXECUTE_OPTION_VALID_FLAGS
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define MI_IS_PAGE_EXECUTABLE(x)
struct _EPROCESS * PEPROCESS
static NTSTATUS NTAPI MiAccessCheck(IN PMMPTE PointerPte, IN BOOLEAN StoreInstruction, IN KPROCESSOR_MODE PreviousMode, IN ULONG_PTR ProtectionMask, IN PVOID TrapFrame, IN BOOLEAN LockHeld)
FORCEINLINE VOID MiReferenceUnusedPageAndBumpLockCount(IN PMMPFN Pfn1)
VOID NTAPI MiCopyPfn(_In_ PFN_NUMBER DestPage, _In_ PFN_NUMBER SrcPage)
PVOID MmNonPagedPoolExpansionStart
#define STATUS_GUARD_PAGE_VIOLATION
#define MI_GET_NEXT_COLOR()
#define MI_PTE_LOOKUP_NEEDED
HARDWARE_PDE_ARMV6 TempPde
PMM_SESSION_SPACE MmSessionSpace
FORCEINLINE VOID MiLockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)
NTSTATUS NTAPI MmGetExecuteOptions(IN PULONG ExecuteOptions)
#define MM_PTE_SOFTWARE_PROTECTION_BITS
#define MI_IS_PAGE_COPY_ON_WRITE(x)
#define MI_IS_WRITE_ACCESS(FaultCode)
#define MM_SHARED_USER_DATA_VA
PFN_NUMBER MmAvailablePages
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
FORCEINLINE VOID MiReferenceUsedPageAndBumpLockCount(IN PMMPFN Pfn1)
VOID NTAPI MiDeletePte(IN PMMPTE PointerPte, IN PVOID VirtualAddress, IN PEPROCESS CurrentProcess, IN PMMPTE PrototypePte)
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
#define STATUS_ALREADY_COMMITTED
static PMMPTE NTAPI MiCheckVirtualAddress(IN PVOID VirtualAddress, OUT PULONG ProtectCode, OUT PMMVAD *ProtoVad)
#define MI_MAKE_DIRTY_PAGE(x)
#define STATUS_PAGE_FAULT_GUARD_PAGE
ULONG OwnsSessionWorkingSetShared
#define MiAddressToPte(x)
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
const ULONG MmProtectToPteMask[32]
PMMPTE LastPteForPagedPool
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
#define MI_SET_PROCESS(x)
VOID NTAPI DbgBreakPoint(VOID)
#define MI_MAKE_CLEAN_PAGE(x)
FORCEINLINE VOID MI_WRITE_INVALID_PDE(IN PMMPDE PointerPde, IN MMPDE InvalidPde)
FORCEINLINE BOOLEAN MiIsUserPde(PVOID Address)
#define MI_SET_PROCESS2(x)
ULONG OwnsSessionWorkingSetExclusive
BOOLEAN NTAPI KeIsAttachedProcess(VOID)
#define PsGetCurrentProcess
FORCEINLINE PFN_NUMBER MiRemoveZeroPageSafe(IN ULONG Color)
MM_PAGED_POOL_INFO MmPagedPoolInfo
#define STATUS_PAGE_FAULT_TRANSITION
FORCEINLINE VOID MI_MAKE_TRANSITION_PTE(_Out_ PMMPTE NewPte, _In_ PFN_NUMBER Page, _In_ ULONG Protection)
MMSUPPORT MmSystemCacheWs
PMMVAD NTAPI MiLocateAddress(IN PVOID VirtualAddress)
#define MiProtoPteToPte(x)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
#define MI_IS_SYSTEM_PAGE_TABLE_ADDRESS(Address)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
VOID NTAPI MiReleaseSystemPtes(IN PMMPTE StartingPte, IN ULONG NumberOfPtes, IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType)
FORCEINLINE BOOLEAN MiIsAccessAllowed(_In_ ULONG ProtectionMask, _In_ BOOLEAN Write, _In_ BOOLEAN Execute)
PMMPTE MmSharedUserDataPte
FORCEINLINE ULONG_PTR MiDetermineUserGlobalPteMask(IN PVOID PointerPte)
#define NtCurrentProcess()
#define MEM_EXECUTE_OPTION_ENABLE
FORCEINLINE PMMPTE MiAddressToPxe(PVOID Address)
_In_ KPROCESSOR_MODE PreviousMode
ULONG GuaranteedStackBytes
struct _MM_SESSION_SPACE * GlobalVirtualAddress
VOID FASTCALL KeZeroPages(IN PVOID Address, IN ULONG Size)
#define MI_IS_SESSION_PTE(Pte)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
#define MI_GET_NEXT_PROCESS_COLOR(x)
#define MI_IS_PFN_DELETED(x)
#define STATUS_PAGE_FAULT_COPY_ON_WRITE
#define InterlockedIncrement16
VOID NTAPI MiZeroPfn(IN PFN_NUMBER PageFrameNumber)
HARDWARE_PTE_ARMV6 TempPte
#define MM_PROTECT_ACCESS
#define STATUS_ACCESS_DENIED
#define MI_PAGE_WRITE_THROUGH(x)
FORCEINLINE VOID KiReleaseProcessLock(IN PKLOCK_QUEUE_HANDLE Handle)
FORCEINLINE BOOLEAN MiIsUserPte(PVOID Address)
#define MI_IS_PAGE_LARGE(x)
FORCEINLINE USHORT MiIncrementPageTableReferences(IN PVOID Address)
#define InterlockedExchangeAddSizeT(a, b)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
FORCEINLINE VOID MiDropLockCount(IN PMMPFN Pfn1)
#define MI_IS_PAGE_WRITEABLE(x)
#define InterlockedExchangePte(PointerPte, Value)
#define MEM_EXECUTE_OPTION_DISABLE
ULONG OwnsSystemWorkingSetExclusive
BOOLEAN MmProtectFreedNonPagedPool
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
#define InterlockedExchange
#define MI_IS_INSTRUCTION_FETCH(FaultCode)
#define MI_IS_PAGE_TABLE_OR_HYPER_ADDRESS(Address)
#define FLG_DISABLE_STACK_EXTENSION
PVOID MmNonPagedPoolStart
#define MM_EXECUTE_READWRITE
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE_USER(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
NTSTATUS FASTCALL MiCheckPdeForPagedPool(IN PVOID Address)
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION
#define KeInitializeEvent(pEvt, foo, foo2)
#define InterlockedIncrement
#define STATUS_ACCESS_VIOLATION
static INT Execute(LPTSTR Full, LPTSTR First, LPTSTR Rest, PARSED_COMMAND *Cmd)
static NTSTATUS NTAPI MiCheckForUserStackOverflow(IN PVOID Address, IN PVOID TrapInformation)
static NTSTATUS NTAPI MiResolveTransitionFault(IN BOOLEAN StoreInstruction, IN PVOID FaultingAddress, IN PMMPTE PointerPte, IN PEPROCESS CurrentProcess, IN KIRQL OldIrql, OUT PKEVENT **InPageBlock)
ULONG OwnsProcessWorkingSetShared
#define MI_PAGE_DISABLE_CACHE(x)
static NTSTATUS NTAPI MiCompleteProtoPteFault(IN BOOLEAN StoreInstruction, IN PVOID Address, IN PMMPTE PointerPte, IN PMMPTE PointerProtoPte, IN KIRQL OldIrql, IN PMMPFN *LockedProtoPfn)
#define STATUS_STACK_OVERFLOW
VOID NTAPI KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql)
#define MEM_EXECUTE_OPTION_PERMANENT
#define MI_IS_SESSION_IMAGE_ADDRESS(Address)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
void * _ReturnAddress(void)
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)
#define RtlCopyMemory(Destination, Source, Length)
struct _MMPFN::@1753::@1759 e2
#define MM_PROTECT_SPECIAL
ULONG OwnsProcessWorkingSetExclusive
#define STATUS_IN_PAGE_ERROR
ULONG MmSizeOfNonPagedPoolInBytes
FORCEINLINE VOID MiLockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
FORCEINLINE PVOID MiPteToAddress(PMMPTE PointerPte)
static NTSTATUS NTAPI MiResolveDemandZeroFault(IN PVOID Address, IN PMMPTE PointerPte, IN ULONG Protection, IN PEPROCESS Process, IN KIRQL OldIrql)
FORCEINLINE BOOLEAN MI_IS_PHYSICAL_ADDRESS(IN PVOID Address)
#define STATUS_PAGE_FAULT_DEMAND_ZERO
#define MmSystemRangeStart
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
FORCEINLINE VOID MI_MAKE_HARDWARE_PTE(IN PMMPTE NewPte, IN PMMPTE MappingPte, IN ULONG_PTR ProtectionMask, IN PFN_NUMBER PageFrameNumber)
FORCEINLINE VOID MiUnlockProcessWorkingSet(IN PEPROCESS Process, IN PETHREAD Thread)