KiInterruptSubDispatchNoLock
VOID __fastcall KiInterruptSubDispatchNoLock(){
__int64 v0;
INT64 v1;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
unsigned __int64 v4;
int v5;
_DWORD *v6;
__int64 v7;
UINT64 v8;
__int64 v9;
UINT64 v10;
int v11;
bool v12;
UINT8 v13;
INT64 v14;
LARGE_INTEGER v15[5];
CurrentIrql = KeGetCurrentIrql();
__writecr8(*(unsigned __int8 *)(v1 + 93));
*(_BYTE *)(v0 - 87) = CurrentIrql;
*(_DWORD *)(v0 - 96) = 0;
CurrentPrcb = KeGetCurrentPrcb();
if( ++*((_BYTE *)CurrentPrcb + 32) == 1 )
{
v4 = __rdtsc();
v5 = *((_DWORD *)CurrentPrcb + 8568);
v6 = (_DWORD *)((char *)CurrentPrcb + 4 * ((unsigned __int16)(v5 & 0x7FF) >> 5) + 34276);
*v6 = v4 ^ __ROR4__(*v6, 5);
*((_DWORD *)CurrentPrcb + 8568) = ++v5;
if( (v5 & 0x3FF) == 0 )
*(_DWORD *)(v0 - 96) = 1;
v7 = *((_QWORD *)CurrentPrcb + 1);
v8 = v4 - *((_QWORD *)CurrentPrcb + 4056);
*(_QWORD *)(v7 + 72) += v8;
v9 = *(unsigned int *)(v7 + 80);
*((_QWORD *)CurrentPrcb + 4056) += v8;
v10 = v8 + v9;
v11 = v10;
if( HIDWORD(v10) )
v11 = -1;
*(_DWORD *)(v7 + 80) = v11;
if( (*(_BYTE *)(v7 + 2) & 0x3E) != 0 )
KiEndThreadAccountingPeriod(KeGetCurrentPrcb(), (_KTHREAD *)v7, v8);
}
_enable();
if( *(_DWORD *)(v0 - 96) )
KiEntropyQueueDpc((__int64)KeGetCurrentPrcb());
*(_QWORD *)(v1 + 136) = v0 - 128;
v12 = (PerfGlobalGroupMask & 0x400000000000i64) == 0;
*(_BYTE *)(v0 + 243) = (PerfGlobalGroupMask & 0x400000000000i64) != 0;
if( !v12 )
EtwGetKernelTraceTimestamp(v15, 0x20004000ui64);
v13 = KiCallInterruptServiceRoutine((_KINTERRUPT *)v1, 0);
if( *(_BYTE *)(v0 + 243) )
{
v14 = v13;
BYTE1(v14) = *(_BYTE *)(v1 + 88);
PerfInfoLogInterrupt(v1, v14, (INT64)v15);
}
_disable();
}Referenced by:
No references.