15 #define MODULE_INVOLVED_IN_ARM3 44 if (
Index == (LastEntry - 1))
51 if (FirstFree <
Index)
56 ASSERT(PreviousFree < LastEntry);
58 #ifdef MMWSLE_PREVIOUS_FREE_JUMP 66 ASSERT(LastFree >= FirstFree);
76 LastEntry =
Index + 1;
78 while ((LastInitializedWsle - LastEntry) > (
PAGE_SIZE /
sizeof(
MMWSLE)))
87 ntoskrnl::MiPfnLockGuard PfnLock;
95 PointerPte->
u.
Long = 0;
112 ULONG NextFree = FirstFree;
113 ULONG PreviousFree = 0;
114 while (NextFree <
Index)
119 PreviousFree = NextFree;
123 if (NextFree <
Index)
132 if (PreviousFree == 0)
178 ntoskrnl::MiPfnLockGuard PfnLock;
231 if (!
Entry.u1.e1.Valid)
253 if (
Entry.u1.e1.Age < 3)
259 if ((
Entry.u1.e1.LockedInMemory) || (
Entry.u1.e1.LockedInWs))
272 ntoskrnl::MiPfnLockGuard PfnLock;
319 PMMWSL WsList = Vm->VmWorkingSetList;
350 if (Vm->WorkingSetSize > Vm->PeakWorkingSetSize)
351 Vm->PeakWorkingSetSize = Vm->WorkingSetSize;
371 PMMWSL WsList = WorkingSet->VmWorkingSetList;
375 WsList->
Wsle = reinterpret_cast<PMMWSLE>(WsList + 1);
384 #if _MI_PAGING_LEVELS == 4 386 #elif _MI_PAGING_LEVELS == 3 388 #elif _MI_PAGING_LEVELS == 2 393 #if _MI_PAGING_LEVELS == 4 396 #if _MI_PAGING_LEVELS >= 3 421 VmListEntry = VmListEntry->
Flink)
#define MI_IS_PAGE_TABLE_ADDRESS(Address)
KEVENT MmWorkingSetManagerEvent
FORCEINLINE BOOLEAN MI_IS_PROCESS_WORKING_SET(PMMSUPPORT WorkingSet)
#define MiAddressToPde(x)
FORCEINLINE KIRQL MiAcquireExpansionLock(VOID)
PFN_NUMBER MmMinimumFreePages
#define PsGetCurrentThread()
_Use_decl_annotations_ VOID NTAPI MiRemoveFromWorkingSetList(_Inout_ PMMSUPPORT Vm, _In_ PVOID Address)
NTKERNELAPI VOID FASTCALL ExReleaseRundownProtection(_Inout_ PEX_RUNDOWN_REF RunRef)
static ULONG TrimWsList(PMMWSL WsList)
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
#define ExAcquireRundownProtection
#define MI_GET_NEXT_COLOR()
VOID NTAPI MmWorkingSetManager(VOID)
KSPIN_LOCK MmExpansionLock
ULONG MinimumWorkingSetSize
PFN_NUMBER MmAvailablePages
_Use_decl_annotations_ VOID NTAPI MiInitializeWorkingSetList(_Inout_ PMMSUPPORT WorkingSet)
static MMPTE GetPteTemplateForWsList(PMMWSL WsList)
#define _Use_decl_annotations_
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD(IN PETHREAD Thread)
#define MiAddressToPte(x)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PFN_NUMBER MmPlentyFreePages
BOOLEAN NTAPI KeIsAttachedProcess(VOID)
#define PsGetCurrentProcess
FORCEINLINE VOID MI_MAKE_TRANSITION_PTE(_Out_ PMMPTE NewPte, _In_ PFN_NUMBER Page, _In_ ULONG Protection)
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
struct _LIST_ENTRY * Flink
FORCEINLINE VOID KeInvalidateTlbEntry(IN PVOID Address)
_In_ WDFCOLLECTION _In_ ULONG Index
ULONG LastInitializedWsle
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
#define MI_GET_NEXT_PROCESS_COLOR(x)
MMPTE ValidKernelPteLocal
static VOID RemoveFromWsList(PMMWSL WsList, PVOID Address)
#define MMWSLE_PREVIOUS_FREE_JUMP
HARDWARE_PTE_ARMV6 TempPte
MMPFNLIST MmModifiedPageListHead
ULONG_PTR VirtualPageNumber
VOID NTAPI KeDetachProcess(VOID)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
static void FreeWsleIndex(PMMWSL WsList, ULONG Index)
FORCEINLINE VOID MiUnlockWorkingSetShared(_In_ PETHREAD Thread, _In_ PMMSUPPORT WorkingSet)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
LIST_ENTRY MmWorkingSetExpansionHead
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
#define MI_SET_PFN_DELETED(x)
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
FORCEINLINE VOID MiLockWorkingSetShared(_In_ PETHREAD Thread, _In_ PMMSUPPORT WorkingSet)
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 const GLfloat const GLdouble const GLfloat GLint i
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
static ULONG GetFreeWsleIndex(PMMWSL WsList)
FORCEINLINE VOID MiReleaseExpansionLock(KIRQL OldIrql)
#define MMWSLE_PREVIOUS_FREE_MASK
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD_EXCLUSIVE(_In_ PETHREAD Thread)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
FORCEINLINE BOOLEAN MiConvertSharedWorkingSetLockToExclusive(_In_ PETHREAD Thread, _In_ PMMSUPPORT Vm)
VOID NTAPI MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN MMPTE TempPte)
PMMWSL MmSystemCacheWorkingSetList
_Use_decl_annotations_ VOID NTAPI MiInsertInWorkingSetList(_Inout_ PMMSUPPORT Vm, _In_ PVOID Address, _In_ ULONG Protection)
FORCEINLINE PVOID MiPteToAddress(PMMPTE PointerPte)
ULONG MaximumWorkingSetSize
static ULONG GetNextPageColorForWsList(PMMWSL WsList)
base of all file and directory entries