KiDispatchInterrupt
VOID __stdcall KiDispatchInterrupt(UINT8 PreviousIrql){
__int64 v1;
struct _KPRCB *CurrentPrcb;
_ETHREAD *CurrentThread;
char v4;
KiCheckForSListAddress((_KTRAP_FRAME *)(v1 - 128));
CurrentPrcb = KeGetCurrentPrcb();
_disable();
if( (CurrentPrcb->DpcRequestSummary & 0x3F) != 0 )
{
KyRetireDpcList(CurrentPrcb);
}
else
{
_enable();
if( CurrentPrcb->QuantumEnd )
{
CurrentPrcb->QuantumEnd = 0;
KiQuantumEnd();
}
else if( CurrentPrcb->NextThread )
{
CurrentThread = CurrentPrcb->CurrentThread;
if( (CurrentThread->Tcb.gap0[2] & 4) == 0 || (KiDeferGroupSchedulingPreemption(CurrentThread, CurrentPrcb), !v4) )
KxDispatchInterrupt();
}
}
}Referenced by:
KiDpcInterrupt
KiDpcInterruptBypass