MiReturnCrossPartitionSectionCharges
NTSTATUS __fastcall MiReturnCrossPartitionSectionCharges(volatile INT64 *a1, INT64 a2, UINT64 a3){
unsigned __int64 v5;
struct _KPRCB *CurrentPrcb;
__int64 v7;
bool v8;
signed __int32 v9;
NTSTATUS result;
if( (_DWORD)a2 )
MiReturnCommit((_MI_PARTITION *)a1, a3);
v5 = a3;
if( a1 == (volatile INT64 *)&MiSystemPartition )
{
CurrentPrcb = KeGetCurrentPrcb();
v7 = *((int *)CurrentPrcb + 8391);
if( (_DWORD)v7 != -1 )
{
if( a3 + v7 <= 0x100 )
{
do
{
if( a3 >= 0x80000 )
break;
v9 = _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, v7 + a3, v7);
v8 = (_DWORD)v7 == v9;
LODWORD(v7) = v9;
if( v8 )
goto LABEL_16;
}
while( v9 != -1 && a3 + v9 <= 0x100 );
}
if( (int)v7 > 192
&& (_DWORD)v7 != -1
&& (_DWORD)v7 == _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8391, 192, v7) )
{
v5 = a3 + (int)v7 - 192;
}
}
}
if( v5 )
_InterlockedExchangeAdd64(a1 + 896, v5);
LABEL_16:
MiReturnCrossPartitionCharges((_MI_CROSS_PARTITION_CHARGES *)a1, 0i64);
return result;
}Referenced by:
MiAddViewsForSection
MiAppendSubsectionChain
MiChargeSegmentCommit
MiCheckControlArea
MiCleanSection
MiCreatePrototypePtes
MiDecrementSubsection
MiDeleteCachedSegment
MiDeleteCachedSubsection
MiDeleteControlArea
MiDeletePartialVad
MiDeleteSubsectionPages
MiDeleteVad
MiDereferenceControlAreaPfnList
MiExtendSection
MiFlushControlArea
MiFlushRelease
MiFlushSectionInternal
MiMakeUnusedSegmentDeleteOnClose
MiProcessDeleteOnClose
MiReferenceActiveSubsection
MiReleaseFaultCharges
MiRemoveMappedPtes
MiRemoveSystemCacheReferences
MiRemoveViewsFromSectionWithPfn
MiReturnCrossPartitionControlAreaCharges
MiSegmentDelete
MiSetDeleteOnClose
MiUpControlAreaRefs
MiUpdateActiveSubsection
MiUpdateLastSubsectionSize
MmPurgeSection
MmUnmapViewInSystemCache