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");
106#if defined(_WIN64) && defined(BUILD_WOW64_ENABLED)
108 if (CurrentThread->ThreadsProcess->Wow64Process !=
NULL)
116 DPRINT1(
"Failed to allocate memory\n");
128#if defined(_WIN64) && defined(BUILD_WOW64_ENABLED)
130 if (CurrentThread->ThreadsProcess->Wow64Process !=
NULL)
163 #define _BYTE_MASK(Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7) \
164 (Bit0) | ((Bit1) << 1) | ((Bit2) << 2) | ((Bit3) << 3) | \
165 ((Bit4) << 4) | ((Bit5) << 5) | ((Bit6) << 6) | ((Bit7) << 7)
166 static const UCHAR AccessAllowedMask[2][2] =
182 return (AccessAllowedMask[
Write != 0][
Execute != 0] >> ProtectionMask) & 1;
208 if (StoreInstruction)
244 TempPte.u.Soft.Protection = ProtectionMask & ~MM_GUARDPAGE;
323 ASSERT(PointerPte <= Vad->LastContiguousPte);
356#if (_MI_PAGING_LEVELS == 2)
364 PVOID SessionAddress;
375 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for PTE %p\n",
397 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for PTE %p, %p\n",
398 PointerPde->
u.
Long, SessionAddress);
411 DbgPrint(
"MiCheckPdeForSessionSpace: No current session for VA %p\n",
427 DbgPrint(
"MiCheckPdeForSessionSpace: No Session PDE for VA %p, %p\n",
555 const VOID* SrcAddress;
622 DPRINT(
"ARM3 Demand Zero Page Fault Handler for address: %p in process: %p\n",
669 ASSERT(PointerPte->u.Hard.Valid == 0);
683 if (
Color != 0xFFFFFFFF)
687 if (!PageFrameNumber)
717 if (PageFrameNumber == 0)
740 if (NeedZero)
MiZeroPfn(PageFrameNumber);
780 DPRINT(
"Demand zero page has now been paged in\n");
795 PMMPTE OriginalPte, PageTablePte;
799 BOOLEAN OriginalProtection, DirtyPage;
803 ASSERT(PointerProtoPte->u.Hard.Valid == 1);
821 Protection = PointerPte->u.Soft.Protection;
824 OriginalProtection =
FALSE;
833 OriginalProtection =
TRUE;
839 StoreInstruction = 0;
858 ASSERT((*LockedProtoPfn)->u3.e2.ReferenceCount >= 1);
860 *LockedProtoPfn =
NULL;
867 Protection &= ~MM_PROTECT_SPECIAL;
1012 PMMPTE PointerToPteForProtoPage;
1013 DPRINT(
"Transition fault on 0x%p with PTE 0x%p in process %s\n",
1014 FaultingAddress, PointerPte, CurrentProcess->ImageFileName);
1025 (
TempPte.u.Soft.Prototype == 0) &&
1026 (
TempPte.u.Soft.Transition == 1));
1030 DPRINT(
"Transition PFN: %lx\n", PageFrameIndex);
1043 DPRINT1(
"The page is currently in a page transition !\n");
1044 *InPageBlock = &Pfn1->
u1.
Event;
1047 DPRINT1(
"And this if for this particular PTE.\n");
1064 DPRINT(
"Transition in active list\n");
1073 DPRINT(
"Transition page in free/zero list\n");
1093 TempPte = *PointerToPteForProtoPage;
1097 DPRINT1(
"Double transition fault not yet supported\n");
1103 ASSERT(PointerPte->u.Hard.Valid == 0);
1104 ASSERT(PointerPte->u.Trans.Prototype == 0);
1105 ASSERT(PointerPte->u.Trans.Transition == 1);
1106 TempPte.u.Long = (PointerPte->u.Long & ~0xFFF) |
1154 ASSERT(PointerPte->u.Hard.Valid == 0);
1155 ASSERT(PointerPte->u.Soft.Prototype == 1);
1182 DPRINT1(
"Access on reserved section?\n");
1191 PteContents = *PointerPte;
1196 Protection =
TempPte.u.Soft.Protection;
1219 PFN_NUMBER PageFrameIndex, ProtoPageFrameIndex;
1257 if (PageFrameIndex == 0)
1264 MiCopyPfn(PageFrameIndex, ProtoPageFrameIndex);
1274 Protection &= ~MM_WRITECOPY;
1302 if (
TempPte.u.Soft.Transition == 1)
1327 if (TrapInformation)
1337 ASSERT(PointerPte->u.Hard.Valid == 0);
1364 DPRINT(
"ARM3 Page Fault Dispatcher for address: %p in process: %p\n",
1384 if (PointerProtoPte)
1394 LockIrql = MiAcquirePfnLock();
1401 else if (PointerPte->u.Hard.Valid == 1)
1433 !(Vad->u2.VadFlags2.ExtendableFile))
1437 DPRINT(
"Should cluster fault, but won't\n");
1445 LockIrql = MiAcquirePfnLock();
1464 else if ((
TempPte.u.Soft.Prototype == 0) &&
1465 (
TempPte.u.Soft.Transition == 1))
1469 DPRINT(
"oooh, shiny, a soft fault! 0x%lx\n", PageFrameIndex);
1488 ASSERT(PointerProtoPte->u.Hard.Valid == 0);
1489 ASSERT(PointerProtoPte->u.Trans.Prototype == 0);
1490 ASSERT(PointerProtoPte->u.Trans.Transition == 1);
1491 TempPte.u.Long = (PointerProtoPte->u.Long & ~0xFFF) |
1512 ASSERT(PointerPte->u.Hard.Valid == 0);
1521 if (++ProcessedPtes == PteCount)
1547 ASSERT(ProcessedPtes == 0);
1560 ASSERT(PointerPte->u.Hard.Valid == 0);
1601 if (
TempPte.u.Soft.Transition)
1608 LockIrql = MiAcquirePfnLock();
1615 if (InPageBlock !=
NULL)
1619 PreviousPageEvent = *InPageBlock;
1620 *InPageBlock = &CurrentPageEvent;
1624 MiReleasePfnLock(LockIrql);
1626 if (InPageBlock !=
NULL)
1631 if (PreviousPageEvent)
1644 if (
TempPte.u.Soft.PageFileHigh != 0)
1647 LockIrql = MiAcquirePfnLock();
1653 MiReleasePfnLock(LockIrql);
1686 if (TrapInformation)
1717#if (_MI_PAGING_LEVELS >= 3)
1719#if (_MI_PAGING_LEVELS == 4)
1728 ULONG ProtectionCode;
1739#if (_MI_PAGING_LEVELS < 3)
1756 DbgPrint(
"MM:***PAGE FAULT AT IRQL > 1 Va %p, IRQL %lx\n",
1759 if (TrapInformation)
1764 DbgPrint(
"MM:***EAX %p, ECX %p EDX %p\n", TrapFrame->
Eax, TrapFrame->
Ecx, TrapFrame->
Edx);
1765 DbgPrint(
"MM:***EBX %p, ESI %p EDI %p\n", TrapFrame->
Ebx, TrapFrame->
Esi, TrapFrame->
Edi);
1766#elif defined(_M_AMD64)
1768 DbgPrint(
"MM:***RAX %p, RCX %p RDX %p\n", TrapFrame->
Rax, TrapFrame->
Rcx, TrapFrame->
Rdx);
1769 DbgPrint(
"MM:***RBX %p, RSI %p RDI %p\n", TrapFrame->
Rbx, TrapFrame->
Rsi, TrapFrame->
Rdi);
1770#elif defined(_M_ARM)
1772 DbgPrint(
"MM:***R0 %p, R1 %p R2 %p, R3 %p\n", TrapFrame->
R0, TrapFrame->
R1, TrapFrame->
R2, TrapFrame->
R3);
1773 DbgPrint(
"MM:***R11 %p, R12 %p SP %p, LR %p\n", TrapFrame->
R11, TrapFrame->
R12, TrapFrame->
Sp, TrapFrame->
Lr);
1790 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1813#if (_MI_PAGING_LEVELS == 2)
1847 if (!IsSessionAddress)
1859 if (!(PointerPte->
u.
Long & PTE_READWRITE) &&
1888#if (_MI_PAGING_LEVELS == 2)
1906_WARN(
"Session space stuff is not implemented yet!")
1913#if (_MI_PAGING_LEVELS < 3)
1925 if (!IsSessionAddress)
1929 CurrentProcess =
NULL;
1971 if (!(
TempPte.u.Long & PTE_READWRITE) &&
1976 ASSERT(!IsSessionAddress);
1999 if ((IsSessionAddress) &&
2052 if ((IsSessionAddress) &&
2093 !(IsSessionAddress) &&
2145#if (_MI_PAGING_LEVELS == 4)
2179#if (_MI_PAGING_LEVELS >= 3)
2226 UserPdeFault =
TRUE;
2236#if (_MI_PAGING_LEVELS == 2)
2259#if _MI_PAGING_LEVELS >= 3
2264 UserPdeFault =
FALSE;
2266 if (TrapInformation)
2293 PFN_NUMBER PageFrameIndex, OldPageFrameIndex;
2296 LockIrql = MiAcquirePfnLock();
2305 if (PageFrameIndex == 0)
2307 MiReleasePfnLock(LockIrql);
2313 MiCopyPfn(PageFrameIndex, OldPageFrameIndex);
2326 TempPte.u.Hard.CopyOnWrite = 0;
2330 MiReleasePfnLock(LockIrql);
2346#if _MI_HAS_NO_EXECUTE
2389 if (TrapInformation)
2407#if (_MI_PAGING_LEVELS == 2)
2443 TempPte.u.Soft.Protection = ProtectionCode & ~MM_GUARDPAGE;
2448 ASSERT(CurrentThread->ApcNeeded == 0);
2466 _WARN(
"This is probably completely broken!");
2475 TempPte.u.Soft.Protection = ProtectionCode;
2490 if (!PageFrameIndex)
2498 if (PageFrameIndex == 0)
2556 ASSERT(ProtectionCode != 0x100);
2560 TempPte.u.Soft.Protection = ProtectionCode;
2598 ProtectionCode = 0x100;
2606 if (ProtectionCode != 0x100)
2618 ASSERT(CurrentThread->ApcNeeded == 0);
2679 *ExecuteOptions = 0;
2727 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)
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
_In_ ULONG _In_ MEMORY_CACHING_TYPE _Out_ PPHYSICAL_ADDRESS _Out_ PVOID * VirtualAddress
#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()
#define KeDelayExecutionThread(mode, foo, t)
#define STATUS_ACCESS_VIOLATION
_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 KeGetCurrentThread
#define FLG_DISABLE_STACK_EXTENSION
#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)
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 MiAddressToPte(x)
#define MI_IS_PAGE_EXECUTABLE(x)
#define MI_IS_PAGE_COPY_ON_WRITE(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 MiAddressToPde(x)
#define MI_MAKE_CLEAN_PAGE(x)
#define MI_MAKE_DIRTY_PAGE(x)
#define KeGetTrapFramePc(TrapFrame)
#define MI_MAKE_PTE_WRITE_COMBINE(Pte)
#define MiPteToAddress(_Pte)
#define MI_MAKE_PTE_NON_CACHED(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)
VOID NTAPI MmRebalanceMemoryConsumers(VOID)
#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_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)
static LARGE_INTEGER TinyTime
PFN_NUMBER NumberOfPrivatePages
EX_PUSH_LOCK AddressCreationLock
ULONG OwnsSessionWorkingSetExclusive
ULONG OwnsSessionWorkingSetShared
ULONG OwnsSystemWorkingSetShared
ULONG OwnsProcessWorkingSetShared
ULONG OwnsProcessWorkingSetExclusive
ULONG OwnsSystemWorkingSetExclusive
UCHAR DisableThunkEmulation
UCHAR ExecuteDispatchEnable
UCHAR ImageDispatchEnable
struct _MMPFN::@2101::@2107 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
NTSYSAPI void WINAPI DbgBreakPoint(void)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define PsGetCurrentProcess