HvpViewMapCOWAndUnsealRange

INT64 __fastcall HvpViewMapCOWAndUnsealRange(INT64 a1, INT64 a2, UINT64 a3){
  INT64 v3; 
  INT64 v4; 
  INT64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  INT64 v9; 
  INT64 result; 
  v3 = (unsigned int)(a2 + 4096);
  v4 = v3 + (unsigned int)a3;
  if( v3 >= (unsigned __int64)v4 )
    return 0i64;
  v6 = a1 + 40;
  while( 1 )
  {
    v7 = *(_QWORD *)v6;
    if( (*(_BYTE *)(v6 + 8) & 1) != 0 && v7 )
      v7 ^= v6;
    while( v7 )
    {
      if( v3 >= *(_QWORD *)(v7 + 40) )
      {
        if( v3 < *(_QWORD *)(v7 + 48) )
          break;
        v8 = *(_QWORD *)(v7 + 8);
      }
      else
      {
        v8 = *(_QWORD *)v7;
      }
      if( (*(_BYTE *)(v6 + 8) & 1) != 0 && v8 )
        v7 ^= v8;
      else
        v7 = v8;
    }
    v9 = v4;
    if( v4 >= *(_QWORD *)(v7 + 48) )
      v9 = *(_QWORD *)(v7 + 48);
    result = HvpViewMapMakeViewRangeCOWByCaller(a1, (_QWORD *)v7, v3, v9);
    if( (int)result < 0 )
      return result;
    v3 = v9;
    if( v9 >= v4 )
      return 0i64;
  }
}

Referenced by:

HvpAddBin
HvpSetRangeProtection