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