VmpProcessAccessedBatch
UINT64 __stdcall VmpProcessAccessedBatch(INT64 a1, INT64 a2, UINT64 a3, UINT64 *a4, INT64 a5){
__int64 v6;
unsigned int v7;
__int64 v10;
int SparseGpaPagesAccessState;
int v12;
UINT64 result;
char *i;
UINT64 v15;
__int64 v16;
char v17[32];
v16 = 0i64;
v6 = *(_QWORD *)(a1 + 72);
v7 = a3;
while( 1 )
{
v10 = 0i64;
if( v6 == -1 )
{
v12 = -1073741823;
v16 = 0i64;
}
else
{
if( (_DWORD)a5 && (*(_BYTE *)(a1 + 88) & 1) == 0 )
v10 = 1i64;
SparseGpaPagesAccessState = HvlGetSparseGpaPagesAccessState(v6, v10, v7, a2, &v16, (__int64)v17);
v10 = v16;
v12 = SparseGpaPagesAccessState;
}
result = (UINT64)v17;
for( i = v17; i < &v17[v10]; ++a4 )
{
v15 = *a4;
if( (*i & 1) != 0 )
v15 |= 1ui64;
++i;
*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