82 #define DPRINTC DPRINT 107 MmNotPresentFaultCachePage (
124 DPRINT(
"Not Present: %p %p (%p-%p)\n",
171 DPRINT(
"Have file and page, set page %x in section @ %x #\n",
229 DPRINT(
"Take reference to page %x #\n",
Page);
233 DPRINT1(
"Found no PFN entry for page 0x%x in page entry 0x%x (segment: 0x%p, offset: %08x%08x)\n",
259 DPRINT(
"Get page into section\n");
289 PVOID TempAddress, TempSource;
293 if (TempAddress ==
NULL)
324 MiCowCacheSectionPage (
338 DPRINT(
"MmAccessFaultSectionView(%p, %p, %p, %u)\n",
364 DPRINTC(
"setting non-cow page %p %p:%p offset %I64x (%Ix) to writable\n",
393 DPRINT(
"Not supposed to be writable\n");
407 if (SwapEntry == MM_WAIT_ENTRY)
428 DPRINT(
"Allocated page %x\n", NewPage);
435 MiCopyPageToPage(NewPage, OldPage);
446 DPRINT1(
"MmCreateVirtualMapping failed, not out of memory\n");
472 AcquireResource DoAcquisition;
590 DPRINT(
"Type %x (%p -> %p)\n",
627 DPRINT(
"Already fault handling ... going to work item (%Ix)\n",
638 DPRINT(
"Queue work item\n");
666 DPRINT1(
"Type %x (%p -> %p)\n",
707 DPRINT1(
"Page fault at high IRQL %u, address %Ix\n",
788 DPRINT1(
"Process %p, Address %Ix\n",
794 DPRINTC(
"Type %x (%p -> %08Ix -> %p) in %p\n",
832 DPRINT(
"Clear resource\n");
839 DPRINTC(
"Already fault handling ... going to work item (%Ix)\n",
Address);
849 DPRINT(
"Queue work item\n");
864 DPRINT(
"DoAcquisition %p -> %x\n",
886 DPRINTC(
"Completed page fault handling: %p:%Ix %x\n",
927 DPRINT1(
"Page fault at high IRQL %u, address %Ix\n",
952 Status = MmNotPresentFaultCacheSectionInner(
Mode,
961 DPRINT(
"MmAccessFault %p:%Ix -> %x\n",
#define KeGetCurrentIrql()
NTSTATUS NTAPI MmAccessFaultCacheSection(KPROCESSOR_MODE Mode, ULONG_PTR Address, BOOLEAN FromMdl)
#define MmGetPageEntrySectionSegment(S, O)
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
VOID NTAPI MmInsertRmap(PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address)
#define MiSetPageEvent(Process, Address)
#define PsGetCurrentThread()
#define STATUS_MORE_PROCESSING_REQUIRED
NTSTATUS NTAPI MmCreateVirtualMapping(struct _EPROCESS *Process, PVOID Address, ULONG flProtect, PPFN_NUMBER Pages, ULONG PageCount)
#define STATUS_INVALID_PARAMETER
#define STATUS_MM_RESTART_OPERATION
_In_ WDFDPC _In_ BOOLEAN Wait
VOID NTAPI MmDeleteRmap(PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address)
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
NTSTATUS NTAPI MmReleasePageMemoryConsumer(ULONG Consumer, PFN_NUMBER Page)
#define MmSetPageEntrySectionSegment(S, O, E)
FORCEINLINE KIRQL MiAcquirePfnLock(VOID)
NTSTATUS NTAPI MmCreatePageFileMapping(struct _EPROCESS *Process, PVOID Address, SWAPENTRY SwapEntry)
#define MiWaitForPageEvent(Process, Address)
NTSTATUS NTAPI MiReadFilePage(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PMM_REQUIRED_RESOURCES RequiredResources)
PMEMORY_AREA NTAPI MmLocateMemoryAreaByAddress(PMMSUPPORT AddressSpace, PVOID Address)
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)
#define MmLockSectionSegment(x)
void __cdecl __debugbreak(void)
FORCEINLINE VOID MiReleasePfnLock(_In_ KIRQL OldIrql)
BOOLEAN NTAPI MmIsPagePresent(struct _EPROCESS *Process, PVOID Address)
VOID NTAPI MmSetDirtyPage(struct _EPROCESS *Process, PVOID Address)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS NTAPI MiGetOnePage(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PMM_REQUIRED_RESOURCES RequiredResources)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
#define PsGetCurrentProcess
PVOID NTAPI MiMapPageInHyperSpace(IN PEPROCESS Process, IN PFN_NUMBER Page, IN PKIRQL OldIrql)
WDF_EXTERN_C_START typedef _In_ WDFCMRESLIST Resources
#define MM_IS_WAIT_PTE(E)
VOID NTAPI MmGetPageFileMapping(struct _EPROCESS *Process, PVOID Address, SWAPENTRY *SwapEntry)
#define MmUnlockSectionSegment(x)
#define ExInitializeWorkItem(Item, Routine, Context)
#define NT_SUCCESS(StatCode)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define MA_GetEndingAddress(_MemoryArea)
VOID NTAPI MmSetPageProtect(struct _EPROCESS *Process, PVOID Address, ULONG flProtect)
BOOLEAN NTAPI MmIsPageSwapEntry(struct _EPROCESS *Process, PVOID Address)
struct _WORK_QUEUE_WITH_CONTEXT * PWORK_QUEUE_WITH_CONTEXT
#define STATUS_UNSUCCESSFUL
VOID NTAPI MiUnmapPageInHyperSpace(IN PEPROCESS Process, IN PVOID Address, IN KIRQL OldIrql)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define MM_ROUND_DOWN(x, s)
#define memcpy(s1, s2, n)
#define IMAGE_SCN_MEM_SHARED
#define _Function_class_(n)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
#define MA_GetStartingAddress(_MemoryArea)
_In_ ULONG _In_ ULONG Offset
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
#define KeInitializeEvent(pEvt, foo, foo2)
#define STATUS_ACCESS_VIOLATION
PFN_NUMBER NTAPI MmGetPfnForProcess(struct _EPROCESS *Process, PVOID Address)
_In_ PFCB _In_ LONGLONG FileOffset
#define IS_SWAP_FROM_SSE(E)
FORCEINLINE PEPROCESS MmGetAddressSpaceOwner(IN PMMSUPPORT AddressSpace)
struct _MEMORY_AREA::@1775 SectionData
VOID NTAPI MmSetSavedSwapEntryPage(PFN_NUMBER Page, SWAPENTRY SavedSwapEntry)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
struct tagContext Context
#define RtlZeroMemory(Destination, Length)
#define PAGE_EXECUTE_READWRITE
NTSTATUS NTAPI MmNotPresentFaultCacheSection(KPROCESSOR_MODE Mode, ULONG_PTR Address, BOOLEAN FromMdl)
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
struct _MEMORY_AREA struct _MM_REQUIRED_RESOURCES * Required
VOID NTAPI MmReferencePage(PFN_NUMBER Page)
struct _MEMORY_AREA * MemoryArea
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
#define MmSystemRangeStart
base of all file and directory entries
struct _WORK_QUEUE_WITH_CONTEXT WORK_QUEUE_WITH_CONTEXT
WORKER_THREAD_ROUTINE * PWORKER_THREAD_ROUTINE
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes