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)
155 ASSERT(Index < WsList->LastInitializedWsle);
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)
HARDWARE_PTE_ARMV6 TempPte
#define PsGetCurrentThread()
#define ExReleaseRundownProtection
#define ExAcquireRundownProtection
_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 const GLfloat const GLdouble const GLfloat GLint i
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
FORCEINLINE KIRQL MiAcquireExpansionLock(VOID)
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD_EXCLUSIVE(_In_ PETHREAD Thread)
FORCEINLINE BOOLEAN MI_IS_PROCESS_WORKING_SET(PMMSUPPORT WorkingSet)
PFN_NUMBER MmMinimumFreePages
#define MI_SET_PFN_DELETED(x)
#define MI_GET_NEXT_COLOR()
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
VOID NTAPI MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN MMPTE TempPte)
PFN_NUMBER MmPlentyFreePages
PMMWSL MmSystemCacheWorkingSetList
KSPIN_LOCK MmExpansionLock
FORCEINLINE VOID MiReleaseExpansionLock(KIRQL OldIrql)
#define MI_IS_PAGE_TABLE_ADDRESS(Address)
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
FORCEINLINE VOID MiUnlockWorkingSet(IN PETHREAD Thread, IN PMMSUPPORT WorkingSet)
FORCEINLINE BOOLEAN MM_ANY_WS_LOCK_HELD(IN PETHREAD Thread)
FORCEINLINE VOID MiLockWorkingSetShared(_In_ PETHREAD Thread, _In_ PMMSUPPORT WorkingSet)
FORCEINLINE BOOLEAN MiConvertSharedWorkingSetLockToExclusive(_In_ PETHREAD Thread, _In_ PMMSUPPORT Vm)
FORCEINLINE VOID MI_MAKE_TRANSITION_PTE(_Out_ PMMPTE NewPte, _In_ PFN_NUMBER Page, _In_ ULONG Protection)
LIST_ENTRY MmWorkingSetExpansionHead
#define MI_GET_NEXT_PROCESS_COLOR(x)
FORCEINLINE VOID MiUnlockWorkingSetShared(_In_ PETHREAD Thread, _In_ PMMSUPPORT WorkingSet)
#define MiAddressToPte(x)
#define MiAddressToPde(x)
#define _Use_decl_annotations_
#define MMWSLE_PREVIOUS_FREE_JUMP
#define MMWSLE_PREVIOUS_FREE_MASK
FORCEINLINE VOID KeInvalidateTlbEntry(IN PVOID Address)
FORCEINLINE PMMPTE MiAddressToPpe(PVOID Address)
#define MiPteToAddress(_Pte)
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
MMPFNLIST MmModifiedPageListHead
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
PFN_NUMBER MmAvailablePages
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
MMPTE ValidKernelPteLocal
BOOLEAN NTAPI KeIsAttachedProcess(VOID)
VOID NTAPI KeDetachProcess(VOID)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
base of all file and directory entries
struct _LIST_ENTRY * Flink
ULONG MinimumWorkingSetSize
ULONG MaximumWorkingSetSize
ULONG_PTR VirtualPageNumber
ULONG LastInitializedWsle
#define CONTAINING_RECORD(address, type, field)
_In_ WDFCOLLECTION _In_ ULONG Index
_Use_decl_annotations_ VOID NTAPI MiInsertInWorkingSetList(_Inout_ PMMSUPPORT Vm, _In_ PVOID Address, _In_ ULONG Protection)
KEVENT MmWorkingSetManagerEvent
static ULONG GetFreeWsleIndex(PMMWSL WsList)
static ULONG TrimWsList(PMMWSL WsList)
_Use_decl_annotations_ VOID NTAPI MiRemoveFromWorkingSetList(_Inout_ PMMSUPPORT Vm, _In_ PVOID Address)
static void FreeWsleIndex(PMMWSL WsList, ULONG Index)
static VOID RemoveFromWsList(PMMWSL WsList, PVOID Address)
static MMPTE GetPteTemplateForWsList(PMMWSL WsList)
static ULONG GetNextPageColorForWsList(PMMWSL WsList)
_Use_decl_annotations_ VOID NTAPI MiInitializeWorkingSetList(_Inout_ PMMSUPPORT WorkingSet)
VOID NTAPI MmWorkingSetManager(VOID)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define PsGetCurrentProcess