MiRemoveVadCharges
void __fastcall MiRemoveVadCharges(__int64 a1, ULONG_PTR a2){
_MI_PARTITION *v4;
_MI_PARTITION *v5;
int v6;
int v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
int v11;
INT64 *SharedVm;
UINT64 v13;
UINT64 v14;
UINT64 v15;
__int128 v16;
_QWORD v17[3];
__int128 v18;
__int64 v19;
v17[0] = 0i64;
v19 = 0i64;
v18 = 0i64;
v16 = 0i64;
MiGetProcessPartition((_EPROCESS *)a2);
v5 = v4;
v6 = 0;
if( (unsigned int)MiIsVadLarge(a1) && (*(_BYTE *)(a1 + 48) & 0x70) != 80 )
{
v6 = 1;
v7 = MiVadCommitCrossPartition(a1);
}
v8 = *(unsigned int *)(a1 + 52);
LODWORD(v8) = v8 & 0x7FFFFFFF;
v9 = v8 | ((unsigned __int64)*(unsigned __int8 *)(a1 + 34) << 31);
if( v9 < 0x7FFFFFFFDi64 && !v7 )
{
v17[1] = *(_QWORD *)(a1 + 8);
v17[2] = *(_QWORD *)a1;
MiFillCommitReturnInfo(v9, (__int64)v17, &v16);
v10 = v16;
if( (_QWORD)v16 )
{
MiReturnFullProcessCharges(a2, v16);
if( v6 )
_InterlockedExchangeAdd64((volatile signed __int64 *)(a2 + 2032), -v10);
}
if( !*((_QWORD *)&v16 + 1) )
goto LABEL_6;
SharedVm = MiGetSharedVm(a2 + 1664);
v14 = SharedVm[1];
if( v14 )
{
if( v13 <= v14 )
{
SharedVm[1] = v14 - v13;
LABEL_6:
*(_DWORD *)(a1 + 52) &= 0x80000000;
*(_BYTE *)(a1 + 34) = 0;
goto LABEL_7;
}
v13 -= v14;
SharedVm[1] = 0i64;
}
if( v13 )
MiReturnCommit(v5, v13);
goto LABEL_6;
}
LABEL_7:
v11 = *(_DWORD *)(a1 + 48) & 0x70;
if( v11 == 64 || v11 == 16 )
{
v15 = MiResidentPagesForSpan(
(PVOID)((*(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32)) << 12),
(PVOID)(((*(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32)) << 12) | 0xFFF));
if( v15 )
MiReturnResident((INT64)v5, v15);
}
MiReleaseVadEventBlocks(a1, 1);
}Referenced by:
MiFinishVadDeletion