HvlGetSparseGpaPagesAccessState
__int64 __fastcall HvlGetSparseGpaPagesAccessState(
__int64 a1,
__int64 a2,
unsigned __int64 a3,
__int64 a4,
_QWORD *a5,
__int64 a6){
unsigned int v6;
__int64 v10;
_QWORD *v11;
VOID *v12;
VOID *v13;
const VOID *v14;
int v15;
UINT16 v16;
__int16 v17;
__int64 v18;
__int64 result;
PHYSICAL_ADDRESS v20[2];
__int128 v21;
PHYSICAL_ADDRESS PageInfo[2];
__int128 v23;
v6 = 0;
v10 = 0i64;
*(_OWORD *)&PageInfo[0].anonymous_0.LowPart = 0i64;
v23 = 0i64;
*(_OWORD *)&v20[0].anonymous_0.LowPart = 0i64;
v21 = 0i64;
v11 = HvlpAcquireHypercallPage(PageInfo, 1ui64, 0i64, 0i64);
v12 = HvlpAcquireHypercallPage(v20, 2ui64, 0i64, 0i64);
*v11 = a1;
v13 = v11 + 2;
v11[1] = a2;
v14 = v12;
while( 1 )
{
v15 = 510;
if( a3 < 0x1FE )
v15 = a3;
memmove(v13, (const VOID *)(a4 + 8 * v10), 8 * v15);
HvcallInitiateHypercall();
if( v16 )
break;
v18 = v17 & 0xFFF;
memmove((VOID *)(v10 + a6), v14, v18);
v13 = v11 + 2;
v10 += v18;
a3 -= v18;
if( !a3 )
goto LABEL_8;
}
v10 += v17 & 0xFFF;
v6 = HvlpHvToNtStatus(v16);
LABEL_8:
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v20);
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
result = v6;
*a5 = v10;
return result;
}Referenced by:
VmpProcessAccessedBatch