MiGetLargePageChain
INT64 __fastcall MiGetLargePageChain(UINT64 a1, UINT64 a2){
unsigned int v2;
INT64 v3;
UINT64 v4;
BOOL v5;
UINT64 v6;
_QWORD *LargePagesDemoteAsNeeded;
INT64 v9;
INT64 v10;
INT64 v11;
v2 = a1;
if( *(_QWORD *)(4544i64 * (unsigned int)a1 + qword_140C50AD0 + 4176) || (MiFlags & 0x30) == 0 )
{
v3 = 0i64;
v4 = a2 >> 9;
v5 = HighestPhysicalPage > 0x110000;
v6 = 0i64;
if( !(a2 >> 9) )
return v3;
while( 1 )
{
LODWORD(v11) = 1;
LODWORD(v10) = v5;
LODWORD(v9) = 0;
LargePagesDemoteAsNeeded = (_QWORD *)MiGetLargePagesDemoteAsNeeded(
(INT64)&MiSystemPartition,
v2,
0x200ui64,
0x200ui64,
v9,
v10,
v11);
if( !LargePagesDemoteAsNeeded )
break;
++v6;
*LargePagesDemoteAsNeeded = v3;
v3 = (INT64)LargePagesDemoteAsNeeded;
if( v6 >= v4 )
return v3;
}
MiFreeLargePageChain(v3);
}
return 0i64;
}Referenced by:
MiInitializePoolCommitPacket