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