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