MiEnableNewPfns
VOID __stdcall MiEnableNewPfns(UINT64 StartPage, UINT64 LastPage){
unsigned int v2;
unsigned __int64 v3;
BOOL v5;
unsigned __int64 v6;
_BOOL8 v7;
__int64 v8;
unsigned __int64 v9;
char *v10;
unsigned __int64 v11;
char v12;
unsigned __int8 v13;
int v14;
unsigned int v15;
_MMPFN *PfnDb;
unsigned int v17;
INT64 v18;
unsigned __int64 v19;
struct _KPRCB *CurrentPrcb;
__int64 v21;
bool v22;
signed __int32 v23;
unsigned int a2;
UINT64 v25;
INT64 a1[2];
__int64 v27;
v27 = 0i64;
v3 = StartPage;
v5 = (v2 & 0x100) == 0;
*(_OWORD *)a1 = 0i64;
v6 = LastPage - StartPage;
v25 = LastPage - StartPage;
v7 = (v2 & 0x100) == 0;
if( (v2 & 0x1800) != 0 )
{
v8 = (v2 >> 11) & 1;
a2 = MiDetermineNewPfnHeatState(v7);
v9 = MiLargePageSizes[v8];
v10 = (char *)MmGetPfnDb() + 48 * v3;
v11 = v6 / v9;
if( v6 / v9 )
{
v12 = ~(_BYTE)v8 & 3;
do
{
MiLockPageInline((INT64)v10);
v10[34] = v5 | v10[34] & 0xF8;
v10[39] = v12 | v10[39] & 0xFC;
MiSetFreeZeroPfnCold((INT64)v10, a2);
v27 = v13;
a1[0] = v3;
a1[1] = v5;
MiInsertLargePageInNodeList((INT64)a1);
v10 += 48 * v9;
v3 += v9;
--v11;
}
while( v11 );
v6 = v25;
}
}
else
{
v14 = MiDetermineNewPfnHeatState(v7);
PfnDb = MmGetPfnDb();
v17 = v15 | 0x400;
if( !v14 )
v17 = v15;
v18 = (INT64)PfnDb + 48 * v3;
while( v3 < LastPage )
{
v19 = (unsigned __int8)MiLockPageInline(v18);
MiInsertPageInFreeOrZeroedList(v3, v17);
_InterlockedAnd64((volatile signed __int64 *)(v18 + 24), 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v19);
++v3;
v18 += 48i64;
}
}
CurrentPrcb = KeGetCurrentPrcb();
v21 = *((int *)CurrentPrcb + 8391);
if( (_DWORD)v21 != -1 )
{
if( v6 + v21 <= 0x100 )
{
do
{
if( v6 >= 0x80000 )
break;
v23 = _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, v6 + v21, v21);
v22 = (_DWORD)v21 == v23;
LODWORD(v21) = v23;
if( v22 )
return;
}
while( v23 != -1 && v6 + v23 <= 0x100 );
}
if( (int)v21 > 192
&& (_DWORD)v21 != -1
&& (_DWORD)v21 == _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, 192, v21) )
{
v6 += (int)v21 - 192;
}
}
if( v6 )
_InterlockedExchangeAdd64(&qword_140C526C0, v6);
}Referenced by:
MiAddPhysicalMemory