MmFreeIndependentPages

void __fastcall MmFreeIndependentPages(VOID *a1, unsigned __int64 a2){
  UINT64 v2; 
  _MMPTE *PteAddress; 
  int v4; 
  unsigned __int64 v5; 
  int v6; 
  _MMPFN *PfnDb; 
  unsigned __int64 PteShadow; 
  _MMPFN *v9; 
  _MMPFN *v10; 
  unsigned __int64 Long; 
  _MMPFN *v12; 
  int v13; 
  int v14; 
  _KTBFLUSH_TYPE v15; 
  _MMPTE *PointerPte; 
  UINT64 v17; 
  __int64 v18; 
  __int64 v19; 
  UINT64 v20; 
  __int128 v21; 
  UINT64 v22; 
  _MMPTE *v23; 
  UINT64 NumberOfPtes; 

  v18 = 0i64;
  v19 = 0i64;
  v21 = 0i64;
  v2 = (a2 >> 12) + ((a2 & 0xFFF) != 0);
  NumberOfPtes = v2;
  v17 = v2;
  v20 = v2;
  PteAddress = MiGetPteAddress(a1);
  PointerPte = PteAddress;
  v23 = &PteAddress[v2];
  LOBYTE(v4) = MiPteInShadowRange((UINT64)&v22);
  v5 = (unsigned __int64)v23;
  v6 = v4;
  PfnDb = MmGetPfnDb();
  do
  {
    LODWORD(PteShadow) = MI_READ_PTE_LOCK_FREE((INT64)PteAddress);
    v22 = PteShadow;
    if( v6 )
      PteShadow = MiReadPteShadow((__int64)&v22, PteShadow);
    v9 = &PfnDb[(PteShadow >> 12) & 0xFFFFFFFFFi64];
    v10 = PfnDb;
    Long = ZeroPte.u.Long;
    v12 = &v10[v9->u4._bf_0 & 0xFFFFFFFFFi64];
    LOBYTE(v13) = MiPteInShadowRange((UINT64)PteAddress);
    if( v13 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
      Long = ZeroPte.u.Long | 0x8000000000000000ui64;
    PteAddress->u.Long = Long;
    LOBYTE(v14) = MiIsPfnFromSlabAllocation((INT64)v9);
    if( v14 )
    {
      --v17;
      --v20;
      MiLockAndDecrementShareCount(v9, 1ui64);
    }
    else if( MiLockAndDecrementShareCount(v9, 1ui64) == PageStillReferenced )
    {
      ++v18;
    }
    MiLockAndDecrementShareCount(v12, 0i64);
    ++PteAddress;
    PfnDb = MmGetPfnDb();
  }
  while( (unsigned __int64)PteAddress < v5 );
  MiReleasePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), PointerPte, NumberOfPtes, v15);
  MiReturnPoolCharges(&v17, 1i64);
}

Referenced by:

ExDeletePoolTagTable
HvlStartBootLogicalProcessors
HvlpInitializeHvCrashdump
IopLiveDumpAllocateDumpBuffers
IopLiveDumpFreeDumpBuffers
IopLiveDumpReleaseResources
IopLiveDumpWriteDumpFile
IopLiveDumpWriteDumpFileWithExtraPages
KeAllocateProcessorProfileStructures
KeStartAllProcessors
KiStartDynamicProcessor
MmFreeIsrStack