MiDeletePartialVad

NTSTATUS __stdcall MiDeletePartialVad(
        PVOID Vad,
        VOID *StartingAddress,
        VOID *EndingAddress,
        _MI_VAD_DELETE_INFO VadSplitType){
  _MMVAD *v6; 
  int v7; 
  _EX_PUSH_LOCK *Process; 
  int v9; 
  UINT64 v10; 
  int v11; 
  int v12; 
  _MMPTE *PteBase; 
  _MMPTE *v14; 
  _MMPTE *v15; 
  int v16; 
  _MMPTE *v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  __int64 v22; 
  _MMSUPPORT_SHARED *v23; 
  unsigned __int64 v24; 
  unsigned __int64 v25; 
  UINT8 v26; 
  _MMVAD *v27; 
  _MMVAD *ExtraCreateInfo; 
  _MMSUPPORT_SHARED *v29; 
  PVOID v30; 
  UINT64 v31; 
  _ETHREAD *v32; 
  unsigned int SessionId; 
  unsigned __int8 v34; 
  int v35; 
  __int64 v36; 
  bool v37; 
  __int64 v38; 
  _KLOCK_ENTRY *v39; 
  unsigned __int8 v40; 
  __int64 v41; 
  UINT64 v42; 
  _SUBSECTION *v43; 
  unsigned __int64 i; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT8 v47; 
  __int64 v48; 
  unsigned __int64 v49; 
  unsigned __int64 v50; 
  _MMVAD_SHORT *p_Core; 
  unsigned __int64 k; 
  _MMVAD *j; 
  __int64 v54; 
  _MMVAD *Pool; 
  int PlaceholderStorage; 
  __int64 v57; 
  unsigned int v58; 
  char v59; 
  UINT64 v60; 
  _RTL_BALANCED_NODE *v61; 
  unsigned int v62; 
  _MMWSL_INSTANCE *bf_0; 
  unsigned __int64 v64; 
  __int64 v65; 
  _MMSUPPORT_SHARED *v66; 
  UINT8 v67; 
  unsigned __int64 v68; 
  __int64 v69; 
  unsigned __int64 v70; 
  unsigned __int64 v71; 
  _MMPTE *v72; 
  _MMPTE *v73; 
  _MMPTE *v74; 
  __int64 v75; 
  _MMSUPPORT_SHARED *v76; 
  UINT8 v77; 
  unsigned __int64 v78; 
  unsigned __int64 v79; 
  unsigned __int64 v80; 
  unsigned __int64 v81; 
  _SUBSECTION *Subsection; 
  unsigned __int64 v83; 
  unsigned __int64 v84; 
  _MI_PARTITION *v85; 
  struct _KPRCB *CurrentPrcb; 
  __int64 CachedResidentAvailable; 
  signed __int32 v88; 
  _RTL_BALANCED_NODE *v89; 
  UINT64 v90; 
  _BOOL8 v91; 
  unsigned __int64 v92; 
  __int64 v93; 
  _MMVAD *NextVad; 
  _MMVAD *NextVada; 
  _MMVAD *Vada; 
  bool v97; 
  __int64 v98; 
  _SUBSECTION *FirstSubsection; 
  _SUBSECTION *v100; 
  _MMSUPPORT_INSTANCE *Vm; 
  _EX_PUSH_LOCK *CurrentProcess; 
  UINT64 DeleteFlags; 
  int v104; 
  char a3[12]; 
  _RTL_BALANCED_NODE *ControlArea; 
  unsigned __int64 v107; 
  _ETHREAD *CurrentThread; 
  UINT8 v109[16]; 
  __int128 v110; 
  __int128 v111; 
  UINT8 WsIrql; 
  _MMVAD_SHORT *v116; 

  *(_OWORD *)v109 = 0i64;
  FirstSubsection = 0i64;
  v110 = 0i64;
  v6 = 0i64;
  v100 = 0i64;
  v7 = 0;
  v111 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v107 = (unsigned __int64)((_BYTE *)EndingAddress - (_BYTE *)StartingAddress + 1) >> 12;
  v97 = 0;
  Process = (_EX_PUSH_LOCK *)CurrentThread->Tcb.ApcState.Process;
  ControlArea = 0i64;
  DeleteFlags = 0i64;
  CurrentProcess = Process;
  Vm = (_MMSUPPORT_INSTANCE *)&Process[208];
  v9 = *((_DWORD *)Vad + 12);
  if( (v9 & 0x100000) != 0 )
  {
    v10 = 64i64;
    v98 = 64i64;
    v11 = 8;
    if( (v9 & 0x70) != 64 )
      v11 = 0;
    LODWORD(DeleteFlags) = v11;
  }
  else
  {
    v10 = 136i64;
    v98 = 136i64;
    v54 = **((_QWORD **)Vad + 9);
    ControlArea = (_RTL_BALANCED_NODE *)v54;
    if( *(_QWORD *)(v54 + 64) )
    {
      if( *((__int64 *)Vad + 15) < 0 )
        return -1073741791;
      v97 = (*(_DWORD *)(v54 + 56) & 0x420) == 0;
    }
  }
  v12 = 2147483645;
  if( VadSplitType != VadDeleteMiddle )
    goto LABEL_6;
  Pool = (_MMVAD *)MiAllocatePool(64i64, v10, 0x46646156ui64);
  v6 = Pool;
  if( !Pool )
    return -1073741670;
  memmove(Pool, Vad, v10);
  v6->Core.ReferenceCount = 0;
  v6->Core.VadNode.ParentValue = -2i64;
  v6->Core.EventList = 0i64;
  v57 = *((unsigned int *)Vad + 13);
  LODWORD(v57) = v57 & 0x7FFFFFFF;
  v58 = v6->Core.u1.LongFlags1 & 0x80000000;
  if( (v57 | ((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31)) == 0x7FFFFFFFDi64 )
  {
    v59 = 15;
    v58 |= 0x7FFFFFFDu;
  }
  else
  {
    v59 = 0;
  }
  v6->Core.u1.LongFlags1 = v58;
  v6->Core.CommitChargeHigh = v59;
  v6->Core.PushLock._bf_0 = 0i64;
  v60 = (((unsigned __int64)EndingAddress + 1) >> 12)
      - (*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32));
  if( (v6->Core.u.LongFlags & 0x70) == 64 && !MiCreateRotateView(&v6->Core) )
  {
    PlaceholderStorage = -1073741670;
LABEL_105:
    MiFreeRotateView(&v6->Core);
    MiFreePlaceholderStorage((INT64)v6);
    ExFreePoolWithTag(v6, 0);
    return PlaceholderStorage;
  }
  if( MiLocateLockedVadEvent((__int64)Vad, 128) )
  {
    PlaceholderStorage = MiCreatePlaceholderStorage(&v6->Core);
    if( PlaceholderStorage < 0 )
      goto LABEL_105;
  }
  MiLockNestedVad(&v6->Core);
  MiAdvanceVadView(v6, v60);
  MiUnlockNestedVad(&v6->Core);
  Process = CurrentProcess;
  if( v10 != 64 )
  {
    v61 = ControlArea;
    v62 = v6->u2.LongFlags2 & 0xFDFFFFFF;
    v6->u4.SequentialVa = 0i64;
    v6->u2.LongFlags2 = v62;
    PlaceholderStorage = MiInsertSharedCommitNode(v61, (_EPROCESS *)CurrentProcess, 0i64);
    if( PlaceholderStorage < 0 )
      goto LABEL_105;
    v7 = 1;
  }
  PlaceholderStorage = MiInsertVadCharges(&v6->Core, (ULONG_PTR)CurrentProcess);
  if( PlaceholderStorage < 0 )
  {
    if( v7 )
      MiRemoveSharedCommitNode((_CONTROL_AREA *)ControlArea, (_EPROCESS *)CurrentProcess, 0i64);
    goto LABEL_105;
  }
  bf_0 = (_MMWSL_INSTANCE *)CurrentProcess[210]._bf_0;
  if( v10 == 64 )
  {
    if( MiVadPageSizes[(v6->Core.u.LongFlags >> 18) & 3] == 16 )
      ++*(_QWORD *)&bf_0[10].LastAccessClearingRemainder;
  }
  else
  {
    if( v6->FileObject )
    {
      ObfReferenceObjectWithTag(v6->FileObject, 0x746C6644ui64);
    }
    else if( MiVadPageSizes[(v6->Core.u.LongFlags >> 18) & 3] == 16 )
    {
      ++bf_0[10].LockedEntries;
    }
    MiUpControlAreaRefs(&v6->Core);
  }
LABEL_6:
  PteBase = MmGetPteBase();
  v14 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)StartingAddress >> 9) & 0x7FFFFFFFF8i64));
  v15 = PteBase;
  v16 = *((_DWORD *)Vad + 12);
  v17 = (_MMPTE *)((char *)v15 + (((unsigned __int64)EndingAddress >> 9) & 0x7FFFFFFFF8i64));
  v18 = 0i64;
  if( (v16 & 0x70) == 16 || (v16 & 0x70) == 64 )
  {
    LODWORD(v64) = MiResidentPagesForSpan(
                     (VOID *)((*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32)) << 12),
                     (VOID *)(((*((unsigned int *)Vad + 7) | ((unsigned __int64)*((unsigned __int8 *)Vad + 33) << 32)) << 12) | 0xFFF));
    v18 = v64;
  }
  --CurrentThread->Tcb.SpecialApcDisable;
  *(_QWORD *)&a3[4] = Process + 154;
  ExAcquirePushLockExclusiveEx(Process + 154, 0i64);
  v19 = *((unsigned int *)Vad + 13);
  LODWORD(v19) = v19 & 0x7FFFFFFF;
  v20 = ((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31) | v19;
  if( v20 != 0x7FFFFFFFDi64 && v20 )
  {
    if( v98 == 64 )
    {
      SharedVm = MiGetSharedVm(Vm);
      v47 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
      SharedVm->GoodCitizenWaiting = 0;
      WsIrql = v47;
      LODWORD(NextVad) = 4;
      LODWORD(v48) = MiComputePageCommitment(
                       StartingAddress,
                       EndingAddress,
                       (_MMVAD_SHORT *)Vad,
                       v47,
                       (UINT64 *)NextVad);
      v22 = v48;
    }
    else
    {
      LODWORD(v65) = MiCountSharedPages((_MMVAD *)Vad, v14, v17);
      v22 = v17 - v14 - v65 + 1;
      v66 = MiGetSharedVm(Vm);
      v67 = ExAcquireSpinLockExclusive((INT64 *)&v66->WorkingSetLock);
      v66->GoodCitizenWaiting = 0;
      WsIrql = v67;
    }
  }
  else
  {
    v21 = 0i64;
    if( v20 != 0x7FFFFFFFDi64 )
      v21 = v20;
    v22 = 0i64;
    v20 = v21;
    v23 = MiGetSharedVm(Vm);
    WsIrql = ExAcquireSpinLockExclusive((INT64 *)&v23->WorkingSetLock);
    v23->GoodCitizenWaiting = 0;
  }
  if( VadSplitType == VadDeleteFront )
  {
    if( v98 != 64 && v97 )
      MiGetProtoPteAddress();
    v24 = v20 - v22;
    if( (((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31) | *((_DWORD *)Vad + 13) & 0x7FFFFFFF) == 0x7FFFFFFFDi64 )
    {
      LOBYTE(v25) = 15;
    }
    else
    {
      v25 = v24 >> 31;
      v12 = v24 & 0x7FFFFFFF;
    }
    *((_DWORD *)Vad + 13) = *((_DWORD *)Vad + 13) & 0x80000000 | v12;
    *((_BYTE *)Vad + 34) = v25;
    MiAdvanceVadView(
      (_MMVAD *)Vad,
      (((unsigned __int64)EndingAddress + 1) >> 12)
    - (*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32)));
    if( v98 != 64 && v97 )
      MiGetProtoPteAddress();
    v26 = WsIrql;
    v27 = (_MMVAD *)Vad;
    ExtraCreateInfo = 0i64;
  }
  else
  {
    v49 = v20 - v22;
    if( VadSplitType == VadDeleteBack )
    {
      if( (((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31) | *((_DWORD *)Vad + 13) & 0x7FFFFFFF) == 0x7FFFFFFFDi64 )
      {
        LOBYTE(v50) = 15;
      }
      else
      {
        v50 = v49 >> 31;
        v12 = v49 & 0x7FFFFFFF;
      }
      *((_DWORD *)Vad + 13) = v12 | *((_DWORD *)Vad + 13) & 0x80000000;
      *((_BYTE *)Vad + 34) = v50;
      if( v98 != 64 && v97 )
      {
        MiGetProtoPteAddress();
        v100 = (_SUBSECTION *)MEMORY[0x10];
      }
      *((_DWORD *)Vad + 7) = ((unsigned __int64)StartingAddress - 1) >> 12;
      *((_BYTE *)Vad + 33) = ((unsigned __int64)StartingAddress - 1) >> 44;
      if( v98 != 64 && v97 )
      {
        MiGetProtoPteAddress();
        FirstSubsection = (_SUBSECTION *)MEMORY[0x10];
        MiAdvanceVadView((_MMVAD *)Vad, 0i64);
      }
      v26 = WsIrql;
      v27 = 0i64;
    }
    else
    {
      if( v98 != 64 && v97 )
      {
        MiGetProtoPteAddress();
        v100 = (_SUBSECTION *)MEMORY[0x10];
      }
      v68 = (unsigned __int64)StartingAddress - 1;
      *((_DWORD *)Vad + 7) = ((unsigned __int64)StartingAddress - 1) >> 12;
      *((_BYTE *)Vad + 33) = ((unsigned __int64)StartingAddress - 1) >> 44;
      if( v98 != 64 && v97 )
      {
        MiGetProtoPteAddress();
        FirstSubsection = (_SUBSECTION *)MEMORY[0x10];
        MiAdvanceVadView((_MMVAD *)Vad, 0i64);
      }
      v107 += (v6->Core.EndingVpn | ((unsigned __int64)v6->Core.EndingVpnHigh << 32))
            - (v6->Core.StartingVpn | ((unsigned __int64)v6->Core.StartingVpnHigh << 32))
            + 1;
      MiInsertVad(v6, (_EPROCESS *)CurrentProcess);
      v69 = *((unsigned int *)Vad + 13);
      LODWORD(v69) = v69 & 0x7FFFFFFF;
      if( (((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31) | v69) == 0x7FFFFFFFDi64 )
      {
        v26 = WsIrql;
        v70 = 0x7FFFFFFFDi64;
      }
      else if( v98 == 64 )
      {
        v26 = WsIrql;
        LODWORD(NextVad) = 4;
        LODWORD(v71) = MiComputePageCommitment(
                         (VOID *)((*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32)) << 12),
                         (VOID *)v68,
                         (_MMVAD_SHORT *)Vad,
                         WsIrql,
                         (UINT64 *)NextVad);
        v70 = v71;
      }
      else
      {
        MiUnlockWorkingSetExclusive(Vm, WsIrql);
        v72 = MmGetPteBase();
        v73 = &v72[(*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32)) & 0xFFFFFFFFFi64];
        v74 = (_MMPTE *)((char *)v72 + ((v68 >> 9) & 0x7FFFFFFFF8i64));
        LODWORD(v75) = MiCountSharedPages((_MMVAD *)Vad, v73, v74);
        v70 = v74 - v73 - v75 + 1;
        v76 = MiGetSharedVm(Vm);
        v77 = ExAcquireSpinLockExclusive((INT64 *)&v76->WorkingSetLock);
        v76->GoodCitizenWaiting = 0;
        v26 = v77;
        WsIrql = v77;
      }
      LODWORD(v78) = v70 & 0x7FFFFFFF;
      v79 = v70 & 0x7FFFFFFF | *((_DWORD *)Vad + 13) & 0x80000000;
      v80 = v70 >> 31;
      *((_DWORD *)Vad + 13) = v79;
      LODWORD(v79) = v79 & 0x7FFFFFFF;
      *((_BYTE *)Vad + 34) = v70 >> 31;
      if( (((unsigned __int64)(unsigned __int8)(v70 >> 31) << 31) | v79) != 0x7FFFFFFFDi64 )
      {
        v81 = v49 - v70;
        v80 = v81 >> 31;
        v78 = v81 & 0xFFFFFFFF7FFFFFFFui64;
      }
      v27 = v6;
      v6->Core.u1.LongFlags1 = v6->Core.u1.LongFlags1 & 0x80000000 | v78;
      v6->Core.CommitChargeHigh = v80;
    }
    ExtraCreateInfo = (_MMVAD *)Vad;
  }
  MiUnlockWorkingSetExclusive(Vm, v26);
  MiDeleteVirtualAddresses(
    StartingAddress,
    EndingAddress,
    (unsigned int)DeleteFlags,
    (UINT8)v109,
    (_MI_DELETE_VA_INFO *)NextVad);
  v29 = MiGetSharedVm(Vm);
  ExAcquireSpinLockExclusive((INT64 *)&v29->WorkingSetLock);
  v29->GoodCitizenWaiting = 0;
  if( FirstSubsection )
    MiDrainSystemAccessLog(Vm);
  MiCaptureDeleteHierarchy(
    StartingAddress,
    EndingAddress,
    WsIrql,
    (_MI_DELETED_PAGE_TABLE_LEVEL_BITS *)&DeleteFlags + 1);
  MiUnlockWorkingSetExclusive(Vm, WsIrql);
  if( !ExtraCreateInfo )
  {
    ExtraCreateInfo = *(_MMVAD **)Vad;
    v30 = Vad;
    if( *(_QWORD *)Vad )
    {
      for( ; ExtraCreateInfo->Core.ExtraCreateInfo; ExtraCreateInfo = (_MMVAD *)ExtraCreateInfo->Core.ExtraCreateInfo )
        ;
    }
    else
    {
      for( i = *((_QWORD *)Vad + 2); ; i = ExtraCreateInfo->Core.VadNode.ParentValue )
      {
        ExtraCreateInfo = (_MMVAD *)(i & 0xFFFFFFFFFFFFFFFCui64);
        if( !ExtraCreateInfo || ExtraCreateInfo->Core.ExtraCreateInfo == v30 )
          break;
        v30 = ExtraCreateInfo;
      }
    }
  }
  if( !v27 )
  {
    v27 = (_MMVAD *)*((_QWORD *)Vad + 1);
    p_Core = (_MMVAD_SHORT *)Vad;
    if( v27 )
    {
      for( j = (_MMVAD *)v27->Core.NextVad; j; j = (_MMVAD *)j->Core.NextVad )
        v27 = j;
    }
    else
    {
      for( k = *((_QWORD *)Vad + 2); ; k = v27->Core.VadNode.ParentValue )
      {
        v27 = (_MMVAD *)(k & 0xFFFFFFFFFFFFFFFCui64);
        if( !v27 || v27->Core.NextVad == p_Core )
          break;
        p_Core = &v27->Core;
      }
    }
  }
  if( !v116 )
    MiClearVadBits(StartingAddress, EndingAddress, ExtraCreateInfo, v27);
  MiReturnPageTablePageCommitment(
    StartingAddress,
    EndingAddress,
    (ULONG_PTR)CurrentProcess,
    ExtraCreateInfo,
    v27,
    (_MMVAD *)Vad,
    (_MI_DELETED_PAGE_TABLE_LEVEL_BITS *)&DeleteFlags + 1);
  v31 = *(_QWORD *)&a3[4];
  if( (_InterlockedExchangeAdd64(*(volatile signed __int64 **)&a3[4], 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)v31);
  *(_DWORD *)a3 = 0;
  v32 = (_ETHREAD *)KeGetCurrentThread();
  if( MiGetSystemRegionType(v31) == 1 )
    SessionId = MmGetSessionIdEx(v32->Tcb.ApcState.Process);
  else
    SessionId = -1;
  --v32->Tcb.SpecialApcDisable;
  v34 = ++v32->Tcb.AbAllocationRegionCount;
  v35 = ((char)v32->Tcb.AbEntrySummary | (char)v32->Tcb.AbOrphanedEntrySummary) ^ 0x3F;
  v36 = v31 & 0x7FFFFFFFFFFFFFFCi64;
  v37 = !_BitScanReverse((unsigned int *)&v38, v35);
  v104 = v38;
  if( v37 )
  {
LABEL_65:
    if( (*(&v32->Tcb.MiscFlags + 1) & 0x10000) == 0 )
      KeBugCheckEx(0x162u, v32, (PVOID)v31, (PVOID)SessionId, 0i64);
  }
  else
  {
    while( 1 )
    {
      v39 = &v32->Tcb.LockEntries[v38];
      v35 &= ~(1 << v38);
      if( (v39->AcquiredByte & 1) != 0
        && (v39->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 1) == 0
        && (v39->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 0x7FFFFFFFFFFFFFFCi64) == v36
        && v39->LockState.SessionId == SessionId )
      {
        v39->AcquiredByte &= ~1u;
        if( v39->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 )
          break;
      }
      v37 = !_BitScanReverse((unsigned int *)&v38, v35);
      v104 = v38;
      if( v37 )
        goto LABEL_64;
    }
    if( !v39 )
    {
LABEL_64:
      v31 = *(_QWORD *)&a3[4];
      goto LABEL_65;
    }
    v39->CrossThreadReleasableAndBusyByte |= 2u;
    if( v39->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 < 0 )
      KiAbEntryRemoveFromTree(v39);
    *(_DWORD *)a3 = v39->BoostBitmap.AllFields & 0x1FFFF;
    v39->BoostBitmap.AllFields &= 0xFFFE0000;
    v39->ThreadLocalFlags &= ~1u;
    v39->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 = 0i64;
    v40 = 1 << (v39 - v32->Tcb.LockEntries);
    if( v34 == 1 )
      v32->Tcb.AbEntrySummary |= v40;
    else
      _InterlockedOr8((volatile signed __int8 *)&v32->Tcb.AbOrphanedEntrySummary, v40);
  }
  --v32->Tcb.AbAllocationRegionCount;
  KiAbThreadRemoveBoosts(&v32->Tcb, *(VOID **)&a3[4], (UINT64 *)a3);
  v37 = v32->Tcb.SpecialApcDisable++ == -1;
  if( v37 && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v32->Tcb.ApcState.ApcListHead[0].Flink != &v32->Tcb.152 )
    KiCheckForKernelApcDelivery();
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( v116 )
  {
    MiReInsertPlaceholderVad((INT64)v116);
    MiUnlockNestedVad(v116);
  }
  if( v6 && (v6->Core.u.LongFlags & 0x100000) == 0 )
  {
    Subsection = v6->Subsection;
    v6->VadsProcess = (_EPROCESS *)((unsigned __int64)CurrentProcess | 1);
    MiManageSubsectionView(Subsection, &v6->ViewLinks, 3i64);
  }
  v41 = v22 - v110;
  v42 = v41 - *(_QWORD *)&v109[8];
  if( v41 )
    MiReturnFullProcessCharges((ULONG_PTR)CurrentProcess, v41);
  if( v42 )
    MiReturnCommit(*(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * HIWORD(CurrentProcess[229].Ptr)), v42);
  if( v98 != 64 )
    PsReturnProcessPagedPoolQuota((ULONG_PTR)CurrentProcess, 8 * v107);
  if( v18 )
  {
    LODWORD(v83) = MiResidentPagesForSpan(
                     (VOID *)((*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32)) << 12),
                     (VOID *)(((*((unsigned int *)Vad + 7) | ((unsigned __int64)*((unsigned __int8 *)Vad + 33) << 32)) << 12) | 0xFFF));
    if( v83 < v18 )
    {
      v84 = v18 - v83;
      v85 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * HIWORD(CurrentProcess[229].Ptr));
      if( v85 == &Irp )
      {
        CurrentPrcb = KeGetCurrentPrcb();
        CachedResidentAvailable = (int)CurrentPrcb->CachedResidentAvailable;
        if( (_DWORD)CachedResidentAvailable != -1 )
        {
          if( v84 + CachedResidentAvailable <= 0x100 )
          {
            do
            {
              if( v84 >= 0x80000 )
                break;
              v88 = _InterlockedCompareExchange(
                      (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                      v84 + CachedResidentAvailable,
                      CachedResidentAvailable);
              v37 = (_DWORD)CachedResidentAvailable == v88;
              LODWORD(CachedResidentAvailable) = v88;
              if( v37 )
                goto LABEL_56;
            }
            while( v88 != -1 && v84 + v88 <= 0x100 );
          }
          if( (int)CachedResidentAvailable > 192
            && (_DWORD)CachedResidentAvailable != -1
            && (_DWORD)CachedResidentAvailable == _InterlockedCompareExchange(
                                                    (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                                                    192,
                                                    CachedResidentAvailable) )
          {
            v84 += (int)CachedResidentAvailable - 192;
          }
        }
      }
      if( v84 )
        _InterlockedExchangeAdd64((volatile signed __int64 *)&v85->Vp.ResidentAvailablePages, v84);
    }
  }
LABEL_56:
  MiFinishVadDeletion(
    Vad,
    (_MMVAD *)StartingAddress,
    EndingAddress,
    (VOID *)(v116 != 0i64),
    NextVada,
    (_MI_DELETED_PAGE_TABLE_LEVEL_BITS *)Vada);
  v43 = FirstSubsection;
  if( FirstSubsection && FirstSubsection != v100 )
  {
    v89 = ControlArea;
    v90 = 0i64;
    v91 = ControlArea[2].ParentValue != 0;
    v92 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&ControlArea[3]);
    do
    {
      LODWORD(v93) = MiDecrementSubsections(v43, v43, 8ui64);
      v43 = v43->NextSubsection;
      v90 += v93;
    }
    while( v43 != v100 );
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v89[3]);
    __writecr8(v92);
    if( v90 )
      MiReturnCrossPartitionSectionCharges(
        *(_MI_CROSS_PARTITION_CHARGES **)(*(&stru_140C4DB30 + 267) + 8i64 * (WORD2(v89[2].Right) & 0x3FF)),
        v91,
        v90);
  }
  return 0;
}

Referenced by:

MiFreeVadRange