KiProcessPendingDisconnect

VOID __stdcall KiProcessPendingDisconnect(
        _KINTERRUPT_TYPE InterruptType,
        _KINTERRUPT *Interrupt,
        _LIST_ENTRY *DisconnectedList){
  void *DisconnectData; 
  bool v6; 
  _INTERRUPT_CONNECTION_DATA *v8; 
  NTSTATUS v9; 
  _LIST_ENTRY *p_InterruptListEntry; 
  _LIST_ENTRY *Blink; 

  if( (Interrupt->InternalState & 2) != 0 && !Interrupt->ActiveCount )
  {
    DisconnectData = Interrupt->DisconnectData;
    v6 = InterruptType == InterruptTypePrimary;
    v8 = (_INTERRUPT_CONNECTION_DATA *)*((_QWORD *)DisconnectData + 1);
    if( v6 )
      KiDisconnectInterruptInternal(Interrupt, v8);
    else
      v9 = KiDisconnectSecondaryInterruptInternal(Interrupt, v8);
    *((_DWORD *)DisconnectData + 4) = v9;
    p_InterruptListEntry = &Interrupt->InterruptListEntry;
    Blink = DisconnectedList->Blink;
    if( Blink->Flink != DisconnectedList )
      __fastfail(3u);
    p_InterruptListEntry->Flink = DisconnectedList;
    p_InterruptListEntry->Blink = Blink;
    Blink->Flink = p_InterruptListEntry;
    DisconnectedList->Blink = p_InterruptListEntry;
  }
}

Referenced by:

KiInterruptDispatchCommon