MiGetCrossPartitionCharges

NTSTATUS __stdcall MiGetCrossPartitionCharges(_MI_CROSS_PARTITION_CHARGES *ChargeInfo, UINT64 NumberOfPages, INT64 a4){
  INT64 v3; 
  unsigned int v4; 
  _MI_CROSS_PARTITION_CHARGES *v5; 
  __int64 v7; 
  INT64 v8; 
  char v9; 
  unsigned __int64 v10; 
  int v11; 
  INT64 v12; 
  INT64 v13; 

  v4 = NumberOfPages;
  v5 = ChargeInfo + 42;
  v7 = (int)NumberOfPages;
  v8 = v3;
  v9 = a4;
  v10 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&ChargeInfo[42]);
  if( (ChargeInfo->CurrentCharges & 0x100000000i64) != 0 && v4 )
  {
    ++ChargeInfo[v7 + 59].ChargePeak;
    v11 = -1073740640;
  }
  else
  {
    v11 = MiApplyCrossPartitionCharges((INT64)ChargeInfo, v4, v8);
    if( v11 >= 0 && (v9 & 1) != 0 )
    {
      v11 = MiApplyCrossPartitionCharges(v12, v4 + 1, v13);
      if( v11 < 0 )
        ChargeInfo[v7 + 59].ChargeFailures -= v8;
    }
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v5);
  __writecr8(v10);
  return v11;
}

Referenced by:

MiCreateLargePfnList
MiGetCrossPartitionCloneCharges
MiGetCrossPartitionCombineCharges
MiGetSubsectionCharges