MiGetCrossPartitionCharges

INT64 __fastcall MiGetCrossPartitionCharges(INT64 a1, INT64 a2, CHAR a3, INT64 a4){
  unsigned int v4; 
  INT64 *v5; 
  __int64 v7; 
  unsigned __int64 v10; 
  int v11; 
  INT64 v12; 
  INT64 v13; 
  v4 = a2;
  v5 = (INT64 *)(a1 + 1344);
  v7 = 32i64 * (int)a2;
  v10 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(a1 + 1344));
  if( (*(_DWORD *)(a1 + 4) & 1) != 0 && v4 )
  {
    ++*(_QWORD *)(v7 + a1 + 1904);
    v11 = -1073740640;
  }
  else
  {
    v11 = MiApplyCrossPartitionCharges(a1, v4, a4);
    if( v11 >= 0 && (a3 & 1) != 0 )
    {
      v11 = MiApplyCrossPartitionCharges(v12, v4 + 1, v13);
      if( v11 < 0 )
        *(_QWORD *)(v7 + a1 + 1896) -= a4;
    }
  }
  ExReleaseSpinLockExclusiveFromDpcLevel(v5);
  __writecr8(v10);
  return(unsigned int)v11;
}

Referenced by:

MiCreateLargePfnList
MiGetCrossPartitionCloneCharges
MiGetCrossPartitionCombineCharges
MiGetSubsectionCharges