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