MiDrainZeroLookasides
VOID __fastcall MiDrainZeroLookasides(_MI_PARTITION *Partition, _MMPFN *DesiredPfn, UINT64 NumberOfPages, UINT64 Color){
unsigned int v4;
unsigned int v6;
unsigned int v7;
_QWORD *v8;
__int64 v9;
__int64 v10;
unsigned int v11;
_WORD *v12;
PSLIST_ENTRY v13;
__int64 v14;
unsigned int v15;
__int64 v16;
_QWORD *v17;
__int64 v18;
struct _SLIST_ENTRY *v19;
struct _SLIST_ENTRY *Next;
unsigned __int8 v21;
unsigned int v22;
v4 = dword_140C4DC3C;
if( DesiredPfn )
v4 = Color + 1;
v22 = v4;
v6 = 513;
v7 = DesiredPfn != 0i64 ? Color : 0;
v15 = v7;
v19 = (struct _SLIST_ENTRY *)((char *)DesiredPfn + 48 * NumberOfPages);
v8 = (_QWORD *)((char *)Partition + 4200);
v9 = 2i64;
v17 = v8;
v18 = 2i64;
do
{
v10 = *v8;
v11 = v7;
v16 = *v8;
if( v7 < v4 )
{
v12 = (_WORD *)(v10 + 16i64 * v7);
do
{
if( *v12 )
{
v13 = RtlpInterlockedFlushSList((PSLIST_HEADER)(v10 + 16i64 * v11));
if( v13 )
{
do
{
Next = v13->Next;
v14 = ((char *)v13 - (char *)MmGetPfnDb()) / 48;
if( DesiredPfn && (v13 < (PSLIST_ENTRY)DesiredPfn || v13 >= v19) )
v6 &= ~0x40u;
else
v6 |= 0x40u;
v13[1].Next = (_SLIST_ENTRY *)MiUpdatePageFileHighInPte((INT64)v13[1].Next, 0i64);
v21 = MiLockPageInline((INT64)v13);
MiInsertPageInFreeOrZeroedList(v14, v6);
_InterlockedAnd64((volatile signed __int64 *)&v13[1].Next + 1, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v21);
v13 = Next;
}
while( Next );
v4 = v22;
}
v10 = v16;
}
++v11;
v12 += 8;
}
while( v11 < v4 );
v7 = v15;
v8 = v17;
v9 = v18;
}
++v8;
v6 = v6 & 0xFFFFFFFC | 2;
v17 = v8;
v18 = --v9;
}
while( v9 );
}Referenced by:
MiProcessWorkingSets
MiReturnPartitionPagesToParent
MiTradePage
MiTransferPartitionPageRun