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