HvpViewMapSealRange

VOID __fastcall HvpViewMapSealRange(INT64 a1, INT64 a2, UINT64 a3){
  INT64 v3; 
  INT64 v4; 
  INT64 v5; 
  INT64 v6; 
  unsigned __int64 v7; 
  INT64 v8; 
  VOID **v9; 
  INT64 v10; 
  UINT64 NewAccessProtection; 
  INT64 a6; 
  v3 = (unsigned int)(a2 + 4096);
  v4 = v3 + (unsigned int)a3;
  v5 = a1;
  if( v3 < (unsigned __int64)v4 )
  {
    v6 = a1 + 40;
    do
    {
      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;
          a1 = *(_QWORD *)(v7 + 8);
        }
        else
        {
          a1 = *(_QWORD *)v7;
        }
        if( (*(_BYTE *)(v6 + 8) & 1) != 0 && a1 )
          v7 ^= a1;
        else
          v7 = a1;
      }
      v8 = v4;
      v9 = *(VOID ***)(v5 + 24);
      if( v4 >= *(_QWORD *)(v7 + 48) )
        v8 = *(_QWORD *)(v7 + 48);
      v10 = *(_QWORD *)(v7 + 56) - *(_QWORD *)(v7 + 24);
      LODWORD(a6) = 0;
      LODWORD(NewAccessProtection) = 2;
      CmSiProtectViewOfSection(a1, v9, (VOID *)(v3 + v10), v8 - v3, NewAccessProtection, (INT64)&a6);
      while( v3 < v8 )
      {
        *(_BYTE *)(((unsigned __int64)(v3 - *(_QWORD *)(v7 + 24)) >> 12) + v7 + 72) &= ~8u;
        v3 += 4096i64;
      }
      v3 = v8;
    }
    while( v8 < v4 );
  }
}

Referenced by:

HvpSetRangeProtection