MiUnlinkStandbyBatch
UINT64 __fastcall MiUnlinkStandbyBatch(
_MMPFN *BaseStandbyPfn,
_MMPTE *ProtoPte,
UINT64 OldPriority,
_MMPTE *PoINTerPte,
UINT64 NumberOfPtes,
_MMPFN **PfnToDiscard){
UINT64 v6;
int v8;
_MMPFN *PfnDb;
unsigned __int64 v11;
unsigned __int64 v12;
INT64 v13;
char v14;
char v15;
int v16;
v6 = NumberOfPtes;
v8 = OldPriority;
if( !NumberOfPtes )
return NumberOfPtes - v6;
do
{
PfnDb = MmGetPfnDb();
while( 1 )
{
while( 1 )
{
v11 = *(_QWORD *)ProtoPte;
v12 = *(_QWORD *)ProtoPte;
if( (*(_QWORD *)ProtoPte & 1) != 0 )
goto LABEL_11;
if( (*(_QWORD *)ProtoPte & 0xC00i64) != 2048 )
return NumberOfPtes - v6;
if( !v11 || !qword_140C4DC80 || (qword_140C4DC80 & v11) != 0 )
{
v12 = *(_QWORD *)ProtoPte;
if( qword_140C4DC80 && (v11 & 0x10) == 0 )
v12 = v11 & ~qword_140C4DC80;
LABEL_11:
if( (*((_QWORD *)PfnDb + 6 * ((v12 >> 12) & 0xFFFFFFFFFi64) + 5) & 0x4000000000000i64) != 0 )
break;
}
}
v13 = (INT64)PfnDb + 48 * ((v12 >> 12) & 0xFFFFFFFFFi64);
if( _interlockedbittestandset64((volatile signed __int32 *)(v13 + 24), 0x3Fui64) )
return NumberOfPtes - v6;
if( *(_QWORD *)ProtoPte == v11 )
break;
_InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
}
if( !v13 )
break;
if( (*(_QWORD *)ProtoPte & 1) == 0 )
{
v14 = *(_BYTE *)(v13 + 34);
if( (v14 & 0x20) == 0 )
{
v15 = *(_BYTE *)(v13 + 35);
if( (v15 & 0x40) == 0 && (v14 & 7) == 2 )
{
v16 = (v15 & 8) != 0 ? 5 : v15 & 7;
if( v16 == v8 && (!MiIsPfnFromSlabAllocation(v13) || *(_WORD *)(v13 + 32) || *(__int64 *)v13 >= 0) )
continue;
}
}
}
_InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
return NumberOfPtes - v6;
if( !(unsigned int)MiUnlinkPageFromList((_MMPFN *)v13, 1ui64) )
{
*PfnToDiscard = (_MMPFN *)v13;
return NumberOfPtes - v6;
}
PoINTerPte = (_MMPTE *)((char *)PoINTerPte + 8);
ProtoPte = (_MMPTE *)((char *)ProtoPte + 8);
MiReadyStandbyPageForActive((_MMPFN *)v13, PoINTerPte);
_InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
--v6;
}
while( v6 );
return NumberOfPtes - v6;
}Referenced by:
MmCheckCachedPageStates