HvpViewMapMakeViewRangeValid

__int64 __fastcall HvpViewMapMakeViewRangeValid(UINT64 a1, _QWORD *a2, __int64 a3, __int64 a4, char a5){
  __int64 v5; 
  unsigned __int64 v6; 
  _BYTE *v7; 
  NTSTATUS v12; 
  UINT64 v13; 
  char v14; 
  UINT64 v15; 
  __int64 i; 
  unsigned __int64 v17; 
  char v18; 
  __int64 v19; 
  char v21; 
  UINT64 NewProtectWin32; 
  UINT64 NewProtectWin32a; 
  __int64 v24; 

  v5 = a2[7] - a2[3];
  v6 = a4 - a3;
  LODWORD(v24) = 0;
  v7 = (_BYTE *)(a3 + v5);
  LODWORD(NewProtectWin32) = 2;
  v12 = CmSiProtectViewOfSection(a1, *(VOID ***)(a1 + 24), v7, a4 - a3, NewProtectWin32, (__int64)&v24);
  if( v12 >= 0 )
  {
    CmSiPrefetchVirtualMemoryRange(*(VOID ***)(a1 + 24), v7, v6);
    v14 = 0;
    if( (*(_DWORD *)(a1 + 32) & 2) != 0 )
    {
      if( a5 && CmSiLockViewOfSection(v13, *(VOID ***)(a1 + 24), v7, v6) >= 0 )
      {
        v14 = 1;
        a2[8] += v6 >> 12;
        *(_DWORD *)(a1 + 32) |= 4u;
        goto LABEL_8;
      }
      LODWORD(NewProtectWin32a) = 8;
      v12 = CmSiProtectViewOfSection(v13, *(VOID ***)(a1 + 24), v7, v6, NewProtectWin32a, (__int64)&v24);
      if( v12 >= 0 )
      {
        v12 = HvpViewMapTouchPages(v7, v6, 1);
        if( v12 >= 0 )
        {
          LODWORD(NewProtectWin32a) = 2;
          CmSiProtectViewOfSection(v15, *(VOID ***)(a1 + 24), v7, v6, NewProtectWin32a, (__int64)&v24);
          goto LABEL_8;
        }
      }
    }
    else
    {
      v12 = HvpViewMapTouchPages(v7, v6, 0);
      if( v12 >= 0 )
      {
LABEL_8:
        for( i = a3; i < a4; i += 4096i64 )
        {
          v17 = (unsigned __int64)(i - a2[3]) >> 12;
          v18 = *((_BYTE *)a2 + v17 + 72);
          *((_BYTE *)a2 + v17 + 72) = v18 | 1;
          if( (*(_DWORD *)(a1 + 32) & 2) != 0 )
          {
            if( v14 )
              v21 = v18 | 0x11;
            else
              v21 = v18 | 5;
            *((_BYTE *)a2 + v17 + 72) = v21;
          }
        }
        v19 = a2[5];
        if( v19 || a2[6] )
        {
          if( v19 == a4 )
          {
            a2[5] = a3;
            return 0;
          }
          if( a2[6] != a3 )
            return 0;
        }
        else
        {
          a2[5] = a3;
        }
        a2[6] = a4;
        return 0;
      }
    }
    LODWORD(NewProtectWin32a) = -2147483647;
    CmSiProtectViewOfSection(v15, *(VOID ***)(a1 + 24), v7, v6, NewProtectWin32a, (__int64)&v24);
  }
  return(unsigned int)v12;
}

Referenced by:

HvpViewMapCreateViewsForRegion
HvpViewMapExtendStorage
HvpViewMapPromoteRangeToMapping