MiFreeMdlPageRun

NTSTATUS __stdcall MiFreeMdlPageRun(UINT64 BasePage, UINT64 PageCount, UINT64 Flags){
  UINT64 v3; 
  int v4; 
  __int64 v5; 
  unsigned int v6; 
  UINT64 v7; 
  __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  __int64 v12; 
  __int64 v13; 
  UINT64 v15; 

  v3 = -1i64;
  v4 = Flags & 1;
  v5 = 0i64;
  v6 = Flags;
  v7 = PageCount;
  while( v7 )
  {
    if( (BasePage & 0xF) == 0 )
    {
      v9 = ((unsigned __int64)KeFeatureBits & 0x2000000000i64) == 0;
      while( 1 )
      {
        v10 = MiLargePageSizes[v9];
        if( ((v10 - 1) & BasePage) == 0 && v7 >= v10 && MiResidentPageDangleFree(BasePage, (unsigned int)v9) )
          break;
        v9 = (unsigned int)(v9 + 1);
        if( (unsigned int)v9 >= 3 )
          goto LABEL_10;
      }
      LODWORD(v12) = MiFreeLargePageMemory(BasePage, v11, (unsigned int)(v4 + 6));
      v5 += v12;
      BasePage += v10;
      v7 -= v10;
      if( (unsigned int)v9 < 3 )
        continue;
    }
LABEL_10:
    if( v3 != (BasePage & 0xFFFFFFFFFFFFFE00ui64) )
    {
      v3 = BasePage & 0xFFFFFFFFFFFFFE00ui64;
      LODWORD(v15) = 0;
      MiUpdateLargePageBitMap(
        *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)MmGetPfnDb()[BasePage].u4._bf_0 >> 39) & 0x3FF)),
        BasePage & 0xFFFFFFFFFFFFFE00ui64,
        0x200ui64,
        0i64,
        v15);
    }
    LODWORD(v13) = MiFreeSmallPageFromMdl(BasePage, v6);
    v5 += v13;
    ++BasePage;
    --v7;
  }
  return v5;
}

Referenced by:

MiAllocatePartitionPhysicalPages
MiDeleteAweInfoPages
MiFreePagesFromMdl
MiFreePartitionPageRun