MiRemoveVadCharges

VOID __stdcall MiRemoveVadCharges(_MMVAD *Vad, ULONG_PTR CurrentProcess){
  __int64 v3; 
  _MI_PARTITION *ProcessPartition; 
  int v5; 
  NTSTATUS v6; 
  __int64 LongFlags1; 
  unsigned __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT64 v12; 
  unsigned __int64 ReleasedCommitDebt; 
  UINT64 v14; 
  __int128 CommitReturnInfo; 
  _MI_DELETE_VA_INFO DeleteInfo; 
  _MMVAD_SHORT *NextVad; 
  __int128 v18; 
  __int64 v19; 

  v3 = *(_QWORD *)&CurrentProcess;
  *(_QWORD *)&DeleteInfo.ResidentPages = 0i64;
  v19 = 0i64;
  v18 = 0i64;
  CommitReturnInfo = 0i64;
  ProcessPartition = MiGetProcessPartition(*(VOID **)&CurrentProcess, *(_EPROCESS **)&CurrentProcess);
  v5 = 0;
  if( MiIsVadLarge((INT64)Vad) && (Vad->Core.u.LongFlags & 0x70) != 80 )
  {
    v5 = 1;
    v6 = MiVadCommitCrossPartition((INT64)Vad);
  }
  LongFlags1 = Vad->Core.u1.LongFlags1;
  LODWORD(LongFlags1) = LongFlags1 & 0x7FFFFFFF;
  v8 = LongFlags1 | ((unsigned __int64)Vad->Core.CommitChargeHigh << 31);
  if( v8 < 0x7FFFFFFFDi64 && !v6 )
  {
    *(_QWORD *)&DeleteInfo.ReducedCommitClonePages = Vad->Core.ExtraCreateInfo;
    NextVad = Vad->Core.NextVad;
    MiFillCommitReturnInfo(v8, &DeleteInfo, (_MI_COMMIT_RETURN_INFO *)&CommitReturnInfo);
    v9 = CommitReturnInfo;
    if( (_QWORD)CommitReturnInfo )
    {
      MiReturnFullProcessCharges(v3, CommitReturnInfo);
      if( v5 )
        _InterlockedExchangeAdd64((volatile signed __int64 *)(v3 + 2032), -v9);
    }
    if( !*((_QWORD *)&CommitReturnInfo + 1) )
      goto LABEL_6;
    SharedVm = MiGetSharedVm((_MMSUPPORT_INSTANCE *)(v3 + 1664));
    ReleasedCommitDebt = SharedVm->ReleasedCommitDebt;
    if( ReleasedCommitDebt )
    {
      if( v12 <= ReleasedCommitDebt )
      {
        SharedVm->ReleasedCommitDebt = ReleasedCommitDebt - v12;
LABEL_6:
        Vad->Core.u1.LongFlags1 &= 0x80000000;
        Vad->Core.CommitChargeHigh = 0;
        goto LABEL_7;
      }
      v12 -= ReleasedCommitDebt;
      SharedVm->ReleasedCommitDebt = 0i64;
    }
    if( v12 )
      MiReturnCommit(ProcessPartition, v12);
    goto LABEL_6;
  }
LABEL_7:
  v10 = Vad->Core.u.LongFlags & 0x70;
  if( v10 == 64 || v10 == 16 )
  {
    LODWORD(v14) = MiResidentPagesForSpan(
                     (VOID *)((Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32)) << 12),
                     (VOID *)(((Vad->Core.EndingVpn | ((unsigned __int64)Vad->Core.EndingVpnHigh << 32)) << 12) | 0xFFF));
    if( v14 )
      MiReturnResident((INT64)ProcessPartition, v14);
  }
  MiReleaseVadEventBlocks(&Vad->Core);
}

Referenced by:

MiFinishVadDeletion