char *__fastcall HalpGetAdapter(__int64 a1, _DEVICE_OBJECT *a2, _DWORD *a3){
__int64 v3;
CHAR v7;
int v8;
int v9;
__int64 v10;
v3 = 0i64;
*a3 = 0;
if( !a2 || (v7 = HalpAreDriversDmarCompatible(a2), v8 = 2, !v7) )
v8 = 0;
v9 = *(_DWORD *)a1;
if( *(_DWORD *)a1 <= 2u && !v8 )
return HalGetAdapterV2(a1, a2, a3);
if( v9 == 3 || v9 == 2 && *(_BYTE *)(a1 + 4) && v8 == 2 )
{
HalGetAdapterV3((GUID *)a1);
return(char *)v10;
}
return(char *)v3;
}