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