00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include "mi.h"
00023
00024
#undef MmIsRecursiveIoFault
00025
00026 PFN_NUMBER
MmSystemLockPagesCount;
00027
00028 extern ULONG
MmTotalSystemDriverPages;
00029
00030 BOOLEAN
00031
MmIsRecursiveIoFault(
00032 VOID
00033 );
00034
00035 PVOID
00036
MiAllocateContiguousMemory (
00037 IN SIZE_T NumberOfBytes,
00038 IN PFN_NUMBER LowestAcceptablePfn,
00039 IN PFN_NUMBER HighestAcceptablePfn,
00040 IN PFN_NUMBER BoundaryPfn,
00041 PVOID CallingAddress
00042 );
00043
00044 PVOID
00045
MiMapLockedPagesInUserSpace (
00046 IN
PMDL MemoryDescriptorList,
00047 IN PVOID StartingVa,
00048 IN MEMORY_CACHING_TYPE CacheType,
00049 IN PVOID BaseVa
00050 );
00051
00052
VOID
00053
MiUnmapLockedPagesInUserSpace (
00054 IN PVOID BaseAddress,
00055 IN
PMDL MemoryDescriptorList
00056 );
00057
00058 LOGICAL
00059
MiGetSystemPteAvailability (
00060 IN ULONG NumberOfPtes,
00061 IN
MM_PAGE_PRIORITY Priority
00062 );
00063
00064
VOID
00065
MiAddMdlTracker (
00066 IN
PMDL MemoryDescriptorList,
00067 IN PVOID CallingAddress,
00068 IN PVOID CallersCaller,
00069 IN PFN_NUMBER NumberOfPagesToLock,
00070 IN ULONG Who
00071 );
00072
00073 typedef struct _PTE_TRACKER {
00074 LIST_ENTRY
ListEntry;
00075 PMDL Mdl;
00076 PFN_NUMBER
Count;
00077 PVOID
SystemVa;
00078 PVOID
StartVa;
00079 ULONG
Offset;
00080 ULONG
Length;
00081 ULONG_PTR
Page;
00082 PVOID
CallingAddress;
00083 PVOID
CallersCaller;
00084 PVOID
PteAddress;
00085 }
PTE_TRACKER, *
PPTE_TRACKER;
00086
00087 typedef struct _SYSPTES_HEADER {
00088 LIST_ENTRY
ListHead;
00089 PFN_NUMBER
Count;
00090 }
SYSPTES_HEADER, *
PSYSPTES_HEADER;
00091
00092 LOGICAL
MmTrackPtes =
FALSE;
00093 BOOLEAN
MiTrackPtesAborted =
FALSE;
00094 SYSPTES_HEADER