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