MiFreeLargeZeroPages
INT64 __fastcall MiFreeLargeZeroPages(UINT64 PageFrameIndex, CHAR *a2, UINT64 a3){
INT64 result;
unsigned int v4;
unsigned int v5;
signed __int64 v6;
CHAR *v7;
__int64 v9;
unsigned __int8 v10;
_MMPFN *v11;
UINT64 BitsMustBeChanged;
INT64 a1[2];
__int64 v14;
result = 0i64;
v14 = 0i64;
v4 = 0;
v5 = a3;
*(_OWORD *)a1 = 0i64;
v6 = (char *)MiLargePageSizes - a2;
v7 = a2;
do
{
while( 1 )
{
v11 = *(_MMPFN **)v7;
if( !*(_QWORD *)v7 )
break;
*(_QWORD *)v7 = *(_QWORD *)v11;
if( v4 == 3 )
{
MiReleaseFreshPage(v11);
}
else
{
LODWORD(BitsMustBeChanged) = 1;
v9 = (v11 - MmGetPfnDb()) / 48;
MiUpdateLargePageBitMap(PageFrameIndex, v9, *(_QWORD *)&v7[v6], 0i64, BitsMustBeChanged);
v10 = MiLockPageInline((INT64)v11);
a1[0] = v9;
a1[1] = v5;
v14 = v10;
result = MiInsertLargePageInNodeList((INT64)a1);
}
}
++v4;
v7 += 8;
}
while( v4 < 4 );
return result;
}Referenced by:
MiCleanupPageTablePages
MiCreateLargePfnList
MiCreatePagingFileMap
MiPfnRangeIsZero