VmpProcessAccessedBatch
UINT64 __fastcall VmpProcessAccessedBatch(INT64 a1, INT64 a2, UINT64 a3, UINT64 *a4, INT64 arg20){
INT64 v6;
unsigned int v7;
INT64 v10;
int SparseGpaPagesAccessState;
int v12;
UINT64 result;
INT64 *i;
UINT64 v15;
INT64 a5;
INT64 a6[4];
a5 = 0i64;
v6 = *(_QWORD *)(a1 + 72);
v7 = a3;
while( 1 )
{
v10 = 0i64;
if( v6 == -1 )
{
v12 = -1073741823;
a5 = 0i64;
}
else
{
if( (_DWORD)arg20 && (*(_BYTE *)(a1 + 88) & 1) == 0 )
v10 = 1i64;
SparseGpaPagesAccessState = HvlGetSparseGpaPagesAccessState(v6, v10, v7, a2, &a5, (INT64)a6);
v10 = a5;
v12 = SparseGpaPagesAccessState;
}
result = (UINT64)a6;
for( i = a6; i < (INT64 *)((char *)a6 + v10); ++a4 )
{
v15 = *a4;
if( (*(_BYTE *)i & 1) != 0 )
v15 |= 1ui64;
i = (INT64 *)((char *)i + 1);
*a4 = v15 & 0xFFFFFFFFFFFFFFF9ui64 | 4;
}
a2 += 8 * v10;
v7 -= v10;
if( !v7 )
break;
if( v12 < 0 )
{
result = *a4;
if( (*a4 & 4) == 0 )
{
result |= 6ui64;
*a4 = result;
}
a2 += 8i64;
++a4;
if( !--v7 )
break;
}
}
return result;
}Referenced by:
VmpQueryAccessedState