HalpArtAvailable

CHAR __fastcall HalpArtAvailable(_DWORD *a1, UINT64 *a2){
  int v5; 
  int v6; 
  unsigned int v7; 
  unsigned int v8; 
  int v9; 
  unsigned int v10; 
  __int128 v11; 
  char v12; 
  int v13; 
  v9 = 0;
  v5 = 0;
  v7 = 0;
  v8 = 0;
  v6 = 0;
  v10 = 0;
  v13 = 0;
  v12 = 0;
  v11 = 0i64;
  if( (int)HalSocRequestApi((INT64)a1, 0i64, 2i64, 0x10ui64, &v11) < 0 )
    return 0;
  if( !((unsigned __int8(__fastcall *)(_QWORD, _QWORD, _QWORD, char *))v11)(0i64, 0i64, 0i64, &v12) )
    return 0;
  (*((void(__fastcall **)(_QWORD, unsigned int *, int *, int *, int *))&v11 + 1))(0i64, &v7, &v13, &v13, &v13);
  (*((void(__fastcall **)(__int64, unsigned int *, int *, int *, int *))&v11 + 1))(
    0x80000000i64,
    &v8,
    &v13,
    &v13,
    &v13);
  if( v12 != 2
    || (unsigned __int8)HalpIsHvPresent() && (!*(_BYTE *)HalpHvCpuManager || !HalpIsMicrosoftCompatibleHvLoaded()) )
  {
    return 0;
  }
  if( v7 < 0x15 )
    return 0;
  if( v8 < 0x80000007 )
    return 0;
  (*((void(__fastcall **)(__int64, int *, int *, int *, int *))&v11 + 1))(21i64, &v5, &v6, &v13, &v13);
  if( !v6 )
    return 0;
  if( !v5 )
    return 0;
  (*((void(__fastcall **)(__int64, int *, int *, int *, int *))&v11 + 1))(2147483655i64, &v13, &v13, &v13, &v9);
  if( (v9 & 0x100) == 0 )
    return 0;
  (*((void(__fastcall **)(__int64, int *, unsigned int *, int *, int *))&v11 + 1))(1i64, &v13, &v10, &v13, &v13);
  *(_DWORD *)a2 = HIBYTE(v10);
  if( a1 )
  {
    *a1 = v5;
    a1[1] = v6;
  }
  return 1;
}

Referenced by:

HalpArtDiscover
HalpArtInitialize