MiGetPageTablePages

VOID __fastcall MiGetPageTablePages(
        _MI_ZERO_PAGE_TABLE_CREATION *PageTableCreation,
        VOID *RealVa,
        UINT64 PageTableCount,
        _MI_SYSTEM_VA_TYPE SystemVaType){
  _MI_ZERO_PAGE_TABLE_CREATION v4; 
  _MI_PARTITION *v5; 
  _MMPFN *v9; 
  int v10; 
  unsigned int v11; 
  unsigned __int32 v12; 
  __int64 v13; 
  _MMPFN *v14; 
  _MMPFN *bf_0; 
  unsigned __int64 v16; 

  v4 = PageTableCreation[16];
  v5 = (_MI_PARTITION *)*((_QWORD *)PageTableCreation + 4);
  *(_QWORD *)PageTableCount = 0i64;
  v9 = 0i64;
  if( (v4 & 8) != 0 || !v5->Vp.TotalCommitLimit )
  {
    v10 = 0;
  }
  else
  {
    if( !MiObtainSystemCharges(v5, (UINT64)RealVa, (unsigned int)PageTableCreation[14]) )
      return;
    *((_QWORD *)PageTableCreation + 5) += RealVa;
    v10 = 1;
    v4 = PageTableCreation[16];
  }
  v16 = 0i64;
  v11 = (v4 & 0x400 | 0x20C280u) >> 6;
  if( RealVa )
  {
    while( 1 )
    {
      v12 = PageTableCreation[71] | _InterlockedExchangeAdd(*((volatile signed __int32 **)PageTableCreation + 34), 1u) & PageTableCreation[70];
      LODWORD(v13) = MiGetPage((ULONG_PTR *)&v5->Core.PartitionId, v12, v11);
      if( v13 == -1 )
      {
        if( (PageTableCreation[16] & 0x10) == 0 )
          break;
        if( !MiSufficientAvailablePages((INT64)v5, 0x60ui64) )
          break;
        LODWORD(v13) = MiGetPage((ULONG_PTR *)&v5->Core.PartitionId, v12, v11 | 4);
        if( v13 == -1 )
          break;
      }
      v14 = &MmGetPfnDb()[v13];
      MiSetPfnTbFlushStamp(v14, 0i64, 0i64);
      v14->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = (__int64)v9;
      ++v16;
      v9 = v14;
      if( v16 >= (unsigned __int64)RealVa )
        goto LABEL_8;
    }
    if( v10 )
    {
      MiReturnCommit(v5, (UINT64)RealVa);
      MiReturnSystemCharges((INT64)v5, (UINT64)RealVa, (unsigned int)PageTableCreation[14]);
      *((_QWORD *)PageTableCreation + 5) -= RealVa;
    }
    if( v9 )
    {
      do
      {
        bf_0 = (_MMPFN *)v9->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0;
        MiReleaseFreshPage(v9);
        v9 = bf_0;
      }
      while( bf_0 );
    }
  }
  else
  {
LABEL_8:
    *(_QWORD *)PageTableCount = v9;
  }
}

Referenced by:

MiCreateSystemPageTable
MiDemoteValidLargePageOneLevel
MmCreateShadowMapping