KiDisconnectSecondaryInterruptInternal

NTSTATUS __stdcall KiDisconnectSecondaryInterruptInternal(
        _KINTERRUPT *Interrupt,
        _INTERRUPT_CONNECTION_DATA *ConnectionData){
  NTSTATUS result; 
  __int64 v3; 
  _KINTERRUPT *v4; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  bool v7; 

  result = -1073741585;
  if( Interrupt->Connected )
  {
    v3 = KiGlobalSecondaryIDT + 48i64 * (Interrupt->Vector - 256);
    v4 = *(_KINTERRUPT **)(v3 + 40);
    if( v4 == Interrupt )
    {
      if( v4->InterruptListEntry.Flink == &v4->InterruptListEntry )
        *(_QWORD *)(v3 + 40) = 0i64;
      else
        *(_QWORD *)(v3 + 40) = (char *)Interrupt->InterruptListEntry.Flink - 8;
    }
    Flink = Interrupt->InterruptListEntry.Flink;
    if( Flink->Blink != &Interrupt->InterruptListEntry
      || (Blink = Interrupt->InterruptListEntry.Blink, Blink->Flink != &Interrupt->InterruptListEntry) )
    {
      __fastfail(3u);
    }
    Blink->Flink = Flink;
    Flink->Blink = Blink;
    v7 = *(_QWORD *)(v3 + 40) != 0i64;
    Interrupt->Connected = 0;
    return v7 ? 0x128 : 0;
  }
  return result;
}

Referenced by:

KiDisconnectInterruptCommon
KiProcessPendingDisconnect