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