KiInsertInterruptObjectOrdered
VOID __stdcall KiInsertInterruptObjectOrdered(_KINTERRUPT *InterruptHead, _KINTERRUPT *Interrupt){
_LIST_ENTRY *p_InterruptListEntry;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v4;
_LIST_ENTRY *v5;
_LIST_ENTRY *v6;
_LIST_ENTRY *v7;
_LIST_ENTRY *v8;
if( Interrupt->SynchronizeIrql && InterruptHead->SynchronizeIrql )
{
p_InterruptListEntry = &InterruptHead->InterruptListEntry;
if( BYTE5(InterruptHead->InterruptListEntry.Blink[5].Flink) )
{
Blink = InterruptHead->InterruptListEntry.Blink;
v4 = &Interrupt->InterruptListEntry;
if( Blink->Flink == p_InterruptListEntry )
{
v4->Flink = p_InterruptListEntry;
Interrupt->InterruptListEntry.Blink = Blink;
Blink->Flink = v4;
p_InterruptListEntry->Blink = v4;
return;
}
LABEL_12:
__fastfail(3u);
}
v5 = &InterruptHead->InterruptListEntry;
do
{
v6 = v5;
if( !BYTE5(v5[5].Flink) )
break;
v5 = v5->Flink;
}
while( v5 != p_InterruptListEntry );
}
else
{
v6 = &InterruptHead->InterruptListEntry;
}
v7 = &Interrupt->InterruptListEntry;
v8 = v6->Blink;
if( v8->Flink != v6 )
goto LABEL_12;
v7->Flink = v6;
v7->Blink = v8;
v8->Flink = v7;
v6->Blink = v7;
}Referenced by:
KiConnectInterrupt
KiConnectSecondaryInterrupt