MiFreeVadRange

INT64 __fastcall MiFreeVadRange(
        _MMVAD *Vad,
        UINT8 *AddressSpaceHeldExclusve,
        UINT64 StartingVpn,
        UINT64 EndingVpn,
        _EPROCESS *Process){
  int v5; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  INT64 result; 
  unsigned int v13; 
  __int64 v14; 
  _EPROCESS *v15; 
  int v16; 
  ULONG_PTR v17; 
  int v18; 
  INT64 ***LockedVadEvent; 
  INT64 v20; 
  int v21; 
  LODWORD(v20) = 0;
  v5 = *((_DWORD *)Vad + 12);
  v7 = (EndingVpn << 12) | 0xFFF;
  v8 = StartingVpn << 12;
  if( (v5 & 0x100000) == 0 || (v5 & 0x1000000) != 0 || (v5 & 0x2000000) == 0 )
    goto LABEL_32;
  if( StartingVpn != (*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad + 32) << 32))
    || EndingVpn != (*((unsigned int *)Vad + 7) | ((unsigned __int64)*((unsigned __int8 *)Vad + 33) << 32)) )
  {
    return 3221225496i64;
  }
  LODWORD(result) = MiCanDeleteEnclave(Vad);
  if( (int)result >= 0 )
  {
LABEL_32:
    result = MiPrepareVadDelete((INT64)Vad, (CHAR *)AddressSpaceHeldExclusve, StartingVpn, EndingVpn, &v20);
    if( (int)result >= 0 )
    {
      v13 = v20;
      v14 = 0i64;
      v15 = Process;
      if( !(_DWORD)v20 )
      {
        if( v21 )
        {
          LockedVadEvent = MiLocateLockedVadEvent((INT64)Vad, 128i64);
          v14 = (__int64)LockedVadEvent[1];
          LockedVadEvent[1] = 0i64;
          MiLockNestedVad();
          *(_DWORD *)(v14 + 24) = v8 >> 12;
          *(_BYTE *)(v14 + 32) = v8 >> 44;
          *(_DWORD *)(v14 + 28) = v7 >> 12;
          *(_BYTE *)(v14 + 33) = v7 >> 44;
        }
        MiDeleteVad(Vad, v14);
        return 0i64;
      }
      if( (*((_DWORD *)Process + 281) & 0x20) != 0 )
        return 3221225738i64;
      if( MiLocateLockedVadEvent((INT64)Vad, 2i64) )
        return 3221225541i64;
      v17 = (unsigned int)(v16 + 62);
      if( v21 )
      {
        result = PsChargeProcessNonPagedPoolQuota((__int64)v15, (unsigned int)(v16 + 62));
        if( (int)result < 0 )
          return result;
        v14 = MiAllocateVad(v8, v7, 2);
        if( !v14 )
        {
          PsReturnProcessNonPagedPoolQuota((ULONG_PTR)v15, v17);
          return 3221225626i64;
        }
        MiLockNestedVad();
      }
      v18 = MiDeletePartialVad((INT64 *)Vad, v8, v7, v13, v14);
      if( v18 >= 0 )
        return 0i64;
      if( v14 )
      {
        MiUnlockNestedVad(v14);
        ExFreePoolWithTag((PVOID)v14, 0);
        PsReturnProcessNonPagedPoolQuota((ULONG_PTR)v15, v17);
      }
      return(unsigned int)v18;
    }
  }
  return result;
}

Referenced by:

MmFreeVirtualMemory
MmStoreAllocateVirtualMemory
MmStoreFreeVirtualMemory