MiFreeContiguousPages

VOID __stdcall MiFreeContiguousPages(_MI_PARTITION *Partition, UINT64 PageFrameIndex, UINT64 SizeInPages){
  UINT64 v4; 
  UINT64 v5; 
  INT64 v6; 
  _MMPFN *v7; 
  UINT64 v8; 
  INT64 v9; 
  UINT64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  unsigned __int64 v14; 

  v4 = (UINT64)Partition;
  v5 = 0i64;
  v6 = 0i64;
  v7 = &MmGetPfnDb()[(_QWORD)Partition];
  do
  {
    v8 = v5;
    v9 = v6;
    if( (v4 & 0x1FF) != 0 || PageFrameIndex < 0x200 || !MiResidentPageDangleFree(v4, 1i64) )
    {
      v14 = MiLockPageInline(v7);
      v6 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v7->u4._bf_0 >> 39) & 0x3FF));
      if( v9 )
        v6 = v9;
      --v7->u3.ReferenceCount;
      ++v5;
      if( v7->u3.ReferenceCount != 1 )
        v5 = v8;
      v7->u2._bf_0 |= 0x4000000000000000ui64;
      MiDecrementShareCount(v7);
      _InterlockedAnd64(&v7->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v14);
      v11 = 48i64;
      v12 = -1i64;
      v13 = 1i64;
    }
    else
    {
      if( !v6 )
        v6 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v7->u4._bf_0 >> 39) & 0x3FF));
      MiFreeLargePageMemory(v4, v10, 6ui64);
      v11 = 24576i64;
      v12 = -512i64;
      v13 = 512i64;
    }
    v7 = (_MMPFN *)((char *)v7 + v11);
    v4 += v13;
    PageFrameIndex += v12;
  }
  while( PageFrameIndex );
  if( v5 )
    MiFreeLargePageCharges(v6, v5);
}

Referenced by:

MiMapSystemImageWithLargePage
MiRemoveMdlPages
MiUnmapLargeDriver
MmMarkPhysicalMemoryAsBad
MmRemovePhysicalMemory