HvlMapSparseGpaPages
INT64 __fastcall HvlMapSparseGpaPages(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, INT64 *a5){
unsigned int v5;
int v8;
LONGLONG *v10;
UINT8 *v11;
INT64 v12;
UINT64 v13;
int v14;
__int16 v15;
UINT16 v16;
UINT16 v17;
__int128 v19[2];
v5 = 0;
v8 = a2;
*a5 = 0i64;
memset(v19, 0, sizeof(v19));
v10 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v19, 1, 0i64, 0i64);
*((_DWORD *)v10 + 3) = 0;
v11 = (UINT8 *)(v10 + 2);
v12 = *a5;
*((_DWORD *)v10 + 2) = v8;
v13 = a3;
*v10 = a1;
v14 = 0;
do
{
if( v13 >= 0xFF )
v13 = 255i64;
memmove(v11, (UINT8 *)(a4 + 16 * v12), 16 * v13);
v14 ^= ((unsigned __int16)v14 ^ (unsigned __int16)v13) & 0xFFF;
HvcallInitiateHypercall();
v17 = v16;
if( v16 )
break;
v12 = *a5 + (v15 & 0xFFF);
*a5 = v12;
v13 = a3 - v12;
}
while( a3 != v12 );
HvlpReleaseHypercallPage((unsigned int *)v19);
if( v17 )
return(unsigned int)HvlpHvToNtStatus(v17);
return v5;
}Referenced by:
VmpFillSlat