MiFreeLargePageMemory

NTSTATUS __stdcall MiFreeLargePageMemory(UINT64 PageFrameIndex, UINT64 LargePageIndex, UINT64 EntireRangeIsZeroed){
  __int64 v3; 
  CHAR v4; 
  __int64 v6; 
  _MMPFN *v7; 
  _BOOL4 v8; 
  PDRIVER_OBJECT v9; 
  CHAR v10; 
  _MMPFN *v11; 
  UINT8 v12; 
  UINT64 v13; 
  UINT64 v14; 
  UINT64 v16; 

  v3 = (unsigned int)LargePageIndex;
  v4 = EntireRangeIsZeroed;
  if( (EntireRangeIsZeroed & 2) != 0 )
    MiConvertSmallPageRangeToLarge(PageFrameIndex, (unsigned int)LargePageIndex);
  v6 = MiLargePageSizes[v3];
  v7 = &MmGetPfnDb()[PageFrameIndex];
  v8 = (v4 & 1) == 0;
  if( (v4 & 1) != 0 && MiColdPageSizeSupported() )
  {
    MiChangePageHeatImmediate(PageFrameIndex, (unsigned int)v3, 0i64);
    MiLockPageInline(v7);
    MiSetPfnPageState((INT64)v7, v8 + 5);
    MiSetFreeZeroPfnCold(v9, (PVOID)(unsigned int)(v8 + 1));
    MiSetPfnPageState((INT64)v7, v10);
    MiUnlockPage(v11, v12);
  }
  v13 = 512i64;
  v14 = PageFrameIndex;
  if( (unsigned int)v3 <= 1 )
    v13 = v6;
  if( (unsigned int)v3 > 1 )
    v14 = PageFrameIndex & 0xFFFFFFFFFFFFFE00ui64;
  LODWORD(v16) = 0;
  MiUpdateLargePageBitMap(
    *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v7->u4._bf_0 >> 39) & 0x3FF)),
    v14,
    v13,
    0i64,
    v16);
  if( MiReadyLargePageToFree(PageFrameIndex, (unsigned int)v3, v4) )
    return MiFinishLargePageFree((INT64)v7, (v4 & 1) == 0);
  else
    return 0;
}

Referenced by:

MiDecommitLargePoolVa
MiFreeContiguousPages
MiFreeLargePages
MiFreeMdlPageRun
MiFreeSlabEntry