HalpInterruptFindBestRouting
INT64 __fastcall HalpInterruptFindBestRouting(UINT64 *a1, INT64 a2){
ULONG_PTR *v2;
__int64 v3;
_DWORD *v4;
unsigned int v5;
ULONG_PTR *v6;
int v7;
ULONG_PTR v8;
ULONG_PTR v9;
int v11;
v11 = HIDWORD(a2);
v2 = HalpInterruptLookupController(*(_DWORD *)a1);
v5 = 0;
if( v2 )
{
v6 = v2 + 32;
v7 = 0;
v8 = v2[32];
v9 = v8;
if( (ULONG_PTR *)v8 != v2 + 32 )
{
do
{
++v7;
if( *(_DWORD *)(v9 + 16) == (_DWORD)v3 && *(_DWORD *)(v9 + 20) <= v11 && *(_DWORD *)(v9 + 24) > v11 )
break;
v9 = *(_QWORD *)v9;
}
while( (ULONG_PTR *)v9 != v6 );
}
if( (ULONG_PTR *)v9 == v6 )
{
if( v7 == 1 )
{
*v4 = *(_DWORD *)(v8 + 16);
v4[1] = *(_DWORD *)(v8 + 20);
}
else
{
*((_DWORD *)v2 + 78) = 3566;
v2[38] = (ULONG_PTR)"minkernel\\hals\\lib\\interrupts\\common\\connect.c";
v5 = -1073741823;
HalpInterruptLastProblem = 23;
*(ULONG_PTR *)((char *)v2 + 292) = 23i64;
}
}
else
{
*(_QWORD *)v4 = v3;
}
}
else
{
return(unsigned int)-1073741811;
}
return v5;
}Referenced by:
HalpInterruptRemap
HalpInterruptSetDestinationInternal
HalpInterruptSetLineState