PerfInfoLogInterrupt
VOID __stdcall PerfInfoLogInterrupt(_KINTERRUPT *Interrupt, UINT64 Data, _ETW_KERNEL_TRACE_TIMESTAMP *TimeStamp){
int v4;
UINT16 v5;
unsigned int v6;
bool i;
unsigned int v8;
__int64 v9;
__int64 v10;
__int64 v11;
void *MessageServiceRoutine;
int v13;
unsigned int MessageIndex;
__int64 v15[3];
int v16;
int v17;
MessageIndex = 0;
if( Interrupt->SynchronizeIrql )
{
if( Interrupt->MessageServiceRoutine )
{
MessageServiceRoutine = Interrupt->MessageServiceRoutine;
v4 = 16;
v5 = 3890;
MessageIndex = Interrupt->MessageIndex;
}
else
{
v5 = 3907;
MessageServiceRoutine = Interrupt->ServiceRoutine;
v4 = 12;
}
}
else
{
v5 = 3935;
MessageServiceRoutine = Interrupt->ServiceRoutine;
v4 = 12;
}
v13 = Data;
v15[2] = (__int64)&MessageServiceRoutine;
v16 = v4;
v17 = 0;
v6 = *(_DWORD *)(EtwpHostSiloState + 4224);
for( i = !_BitScanForward(&v8, v6); !i; i = !_BitScanForward(&v8, v6) )
{
v6 &= v6 - 1;
v9 = v8;
v10 = 32i64 * v8 + EtwpHostSiloState + 4260;
if( v10 )
{
if( (*(_DWORD *)(v10 + 4) & 0x4000) != 0 )
{
v11 = *(unsigned __int8 *)(EtwpHostSiloState + 2 * v9 + 4209) - 1i64;
v15[1] = 8i64;
v15[0] = (__int64)&TimeStamp->KernelTraceTimeStamp[v11];
EtwpLogKernelEvent(
(__int64)v15,
(_ETW_SILODRIVERSTATE *)EtwpHostSiloState,
*(unsigned __int8 *)(EtwpHostSiloState + 2 * v9 + 4208),
2u,
v5,
0x400A02u);
}
}
}
}Referenced by:
KiInterruptSubDispatch
KiInterruptSubDispatchNoLock
KiInvokeInterruptServiceRoutine
KiScanInterruptObjectList