MiPurgeZeroList
VOID __stdcall MiPurgeZeroList(_MI_PARTITION *Partition){
unsigned int v2;
UINT64 *v3;
char *v4;
unsigned __int64 v5;
UINT64 v6;
if( *((_BYTE *)Partition + 4829) )
{
MiPurgeLargeZeroNodePages(Partition);
v2 = 0;
if( dword_140C4DC3C )
{
v3 = (UINT64 *)(*((_QWORD *)Partition + 272) + 16i64);
do
{
while( 1 )
{
v6 = *v3;
if( *v3 == 0xFFFFFFFFFi64 )
break;
v4 = (char *)MmGetPfnDb() + 48 * v6;
v5 = (unsigned __int8)MiLockPageInline((INT64)v4);
if( v6 <= 0xFFFFFFFFFi64
&& (*((_QWORD *)MmGetPfnDb() + 6 * v6 + 5) & 0x4000000000000i64) != 0
&& (*((_QWORD *)v4 + 5) & 0x1000000000i64) == 0
&& (v4[34] & 7) == 0 )
{
MiUnlinkFreeOrZeroedPage(v6, 0i64, 0i64);
MiInsertPageInFreeOrZeroedList(v6, 2ui64);
}
_InterlockedAnd64((volatile signed __int64 *)v4 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v5);
}
++v2;
v3 += 5;
}
while( v2 < dword_140C4DC3C );
}
*((_BYTE *)Partition + 4829) = 0;
}
}Referenced by:
MiFinishResume