MiFreePartitionPhysicalPages

VOID __fastcall MiFreePartitionPhysicalPages(_MI_PARTITION *FromPartition){
  _MI_PARTITION *v1; 
  ULONG_PTR v2; 
  _MI_PARTITION *v3; 
  unsigned int v5; 
  ULONG_PTR *v6; 
  UINT64 v7; 
  v2 = *((_QWORD *)FromPartition + 866);
  v3 = v1;
  MiReturnPartitionPagesToParent(FromPartition);
  v5 = 0;
  if( KeNumberNodes )
  {
    v6 = (ULONG_PTR *)(*((_QWORD *)FromPartition + 2) + 4352i64);
    do
    {
      if( *v6 )
        KeBugCheckEx(0x1Au, 0x41008ui64, *v6, 0i64, 0i64);
      v6 += 568;
      ++v5;
    }
    while( v5 < (unsigned __int16)KeNumberNodes );
  }
  if( *((_QWORD *)FromPartition + 512) )
    KeBugCheckEx(0x1Au, 0x41006ui64, v2, *((_QWORD *)FromPartition + 866), *((_QWORD *)FromPartition + 888));
  if( *((_QWORD *)FromPartition + 866) )
    KeBugCheckEx(0x1Au, 0x41005ui64, v2, *((_QWORD *)FromPartition + 866), *((_QWORD *)FromPartition + 888));
  if( *((_QWORD *)FromPartition + 888) )
    KeBugCheckEx(0x1Au, 0x41004ui64, v2, *((_QWORD *)FromPartition + 888), 0i64);
  if( *((_QWORD *)FromPartition + 896) != v2 || *((_QWORD *)FromPartition + 896) != *((_QWORD *)FromPartition + 949) )
    KeBugCheckEx(0x1Au, 0x41003ui64, v2, *((_QWORD *)FromPartition + 896), *((_QWORD *)FromPartition + 949));
  MiReturnResident((INT64)v3, *((_QWORD *)FromPartition + 896));
  v7 = *((_QWORD *)FromPartition + 949);
  if( v3 == (_MI_PARTITION *)&MiSystemPartition )
  {
    MiReturnCommit(v3, v7);
    _InterlockedExchangeAdd64(&qword_140C4ECF8, -(__int64)v7);
  }
  else
  {
    MiIncreaseCommitLimits(v3, v7, v7, 0i64, 0i64);
  }
}

Referenced by:

MiDeletePartitionResources