KiIpiInterruptSubDispatch
VOID __stdcall KiIpiInterruptSubDispatch(){
__int64 v0;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
__int64 v3;
UINT64 v4;
__int64 v5;
UINT64 v6;
int v7;
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xEui64);
*(_BYTE *)(v0 - 87) = CurrentIrql;
CurrentPrcb = KeGetCurrentPrcb();
if( ++*((_BYTE *)CurrentPrcb + 32) == 1 )
{
v3 = *((_QWORD *)CurrentPrcb + 1);
v4 = __rdtsc() - *((_QWORD *)CurrentPrcb + 4056);
*(_QWORD *)(v3 + 72) += v4;
v5 = *(unsigned int *)(v3 + 80);
*((_QWORD *)CurrentPrcb + 4056) += v4;
v6 = v4 + v5;
v7 = v6;
if( HIDWORD(v6) )
v7 = -1;
*(_DWORD *)(v3 + 80) = v7;
if( (*(_BYTE *)(v3 + 2) & 0x3E) != 0 )
KiEndThreadAccountingPeriod(KeGetCurrentPrcb(), (_KTHREAD *)v3, v4);
}
_enable();
KiIpiProcessRequests(0i64, 0i64);
_disable();
}Referenced by:
KiIpiInterrupt