HalpIommuLocateFromDevice
INT64 __fastcall HalpIommuLocateFromDevice(INT64 a1, INT64 *a2, INT64 a3){
INT64 v3;
unsigned int v4;
INT64 v5;
char v6;
INT64 v7;
INT64 i;
v3 = HalpIommuList;
v4 = 0;
v5 = a3;
v6 = 0;
v7 = 0i64;
while( (INT64 *)v3 != &HalpIommuList )
{
v7 = v3;
if( *(_QWORD *)(v3 + 192) )
{
v6 = (*(__int64(__fastcall **)(_QWORD, INT64, _QWORD, INT64))(v3 + 192))(*(_QWORD *)(v3 + 16), a1, 0i64, v5);
if( v6 )
break;
}
v3 = *(_QWORD *)v3;
}
for( i = HalpIommuList; (INT64 *)i != &HalpIommuList; i = *(_QWORD *)i )
{
if( v6 )
goto LABEL_8;
v7 = i;
if( *(_QWORD *)(i + 192) )
{
LOBYTE(a3) = 1;
v6 = (*(__int64(__fastcall **)(_QWORD, INT64, INT64, INT64))(i + 192))(*(_QWORD *)(i + 16), a1, a3, v5);
if( v6 )
goto LABEL_8;
}
}
if( !v6 )
return(unsigned int)-1073741275;
LABEL_8:
*a2 = v7;
return v4;
}Referenced by:
HalpQueryIommuReservedRegionInformation
IommuMapDevice