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