HalpInterruptFindBestRouting
NTSTATUS __stdcall HalpInterruptFindBestRouting(
_INTERRUPT_LINE *SourceLine,
_INTERRUPT_LINE UltimateDestination,
_INTERRUPT_LINE *OutputRouting){
_REGISTERED_INTERRUPT_CONTROLLER *v3;
__int64 v4;
_DWORD *v5;
NTSTATUS v6;
_LIST_ENTRY *p_OutputLinesHead;
int v8;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v10;
int Line;
Line = UltimateDestination.Line;
v3 = HalpInterruptLookupController(SourceLine->UnitId);
v6 = 0;
if( !v3 )
return -1073741811;
p_OutputLinesHead = &v3->OutputLinesHead;
v8 = 0;
Flink = v3->OutputLinesHead.Flink;
v10 = Flink;
if( Flink != &v3->OutputLinesHead )
{
do
{
++v8;
if( LODWORD(v10[1].Flink) == (_DWORD)v4 && SHIDWORD(v10[1].Flink) <= Line && SLODWORD(v10[1].Blink) > Line )
break;
v10 = v10->Flink;
}
while( v10 != p_OutputLinesHead );
}
if( v10 == p_OutputLinesHead )
{
if( v8 == 1 )
{
*v5 = Flink[1].Flink;
v5[1] = HIDWORD(Flink[1].Flink);
}
else
{
v3->ProblemSourceLine = 3566;
v3->ProblemSourceFile = "minkernel\\hals\\lib\\interrupts\\common\\connect.c";
v6 = -1073741823;
*(&CmpDummyThreadEvent + 1789) = 23;
*(_QWORD *)&v3->Problem = 23i64;
}
}
else
{
*(_QWORD *)v5 = v4;
}
return v6;
}Referenced by:
HalpInterruptRemap
HalpInterruptSetDestinationInternal
HalpInterruptSetLineState