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