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