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