KiIpiInterruptSubDispatch
VOID __stdcall KiIpiInterruptSubDispatch(){
__int64 v0;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
_ETHREAD *CurrentThread;
UINT64 v4;
__int64 CurrentRunTime;
UINT64 v6;
int v7;
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xEui64);
*(_BYTE *)(v0 - 87) = CurrentIrql;
CurrentPrcb = KeGetCurrentPrcb();
if( ++CurrentPrcb->NestingLevel == 1 )
{
CurrentThread = CurrentPrcb->CurrentThread;
v4 = __rdtsc() - CurrentPrcb->StartCycles;
CurrentThread->Tcb.CycleTime += v4;
CurrentRunTime = CurrentThread->Tcb.CurrentRunTime;
CurrentPrcb->StartCycles += v4;
v6 = v4 + CurrentRunTime;
v7 = v6;
if( HIDWORD(v6) )
v7 = -1;
CurrentThread->Tcb.CurrentRunTime = v7;
if( (CurrentThread->Tcb.gap0[2] & 0x3E) != 0 )
KiEndThreadAccountingPeriod(KeGetCurrentPrcb(), &CurrentThread->Tcb, v4);
}
_enable();
KiIpiProcessRequests(0i64, 0i64);
_disable();
}Referenced by:
KiIpiInterrupt