IopTimerDispatch
VOID __stdcall IopTimerDispatch(KDPC *Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2){
int v8;
UINT64 v9;
unsigned __int8 v10;
unsigned __int64 v11;
int v12;
_LIST_ENTRY *i;
_LIST_ENTRY *v14;
__int64 v15;
INT64 v16;
int v17;
int v18;
PVOID v19;
INT64 result[13];
LARGE_INTEGER v21[2];
__int128 v22;
result[12] = (INT64)&v15;
v19 = DeferredContext;
v8 = *(_DWORD *)(&PerfGlobalGroupMask + 1) & 0x800000;
v18 = *(_DWORD *)(&PerfGlobalGroupMask + 1) & 0x800000;
memset((INT64)result, 0i64);
if( (unsigned __int64)(((__int64)DeferredContext >> 47) + 1) > 1 )
{
v17 = 0;
Dpc->Type = 0;
Dpc->DeferredContext = (void *)((unsigned __int64)SystemArgument2 >> 8);
*(INT64 *)((char *)&result[10] + 2) = (INT64)SystemArgument1;
*(INT64 *)((char *)&result[1] + 2) = __ROL8__(DeferredContext, (char)SystemArgument1);
*(INT64 *)((char *)&result[8] + 2) = __ROR8__(Dpc, (char)SystemArgument1);
Dpc->SystemArgument1 = (void *)((unsigned __int64)Dpc->SystemArgument1 ^ (unsigned __int64)SystemArgument2);
Dpc->SystemArgument2 = (void *)((unsigned __int64)Dpc->SystemArgument2 ^ (unsigned __int64)SystemArgument1);
KiCustomAccessRoutine1((UINT64 *)DeferredContext);
}
if( *(_DWORD *)DeferredContext )
{
KeAcquireSpinLockRaiseToDpc(&IopTimerLock, v9);
v11 = v10;
v12 = *(_DWORD *)DeferredContext;
for( i = IopTimerQueueHead.Flink; i != &IopTimerQueueHead && v12; i = i->Flink )
{
if( WORD1(i[-1].Blink) )
{
v14 = i + 1;
if( v8 )
{
*(_OWORD *)&v21[0].LowPart = 0i64;
v22 = 0i64;
EtwGetKernelTraceTimestamp(v21, 0x40800000ui64);
((void(__fastcall *)(_LIST_ENTRY *, _LIST_ENTRY *))v14->Flink)(i[2].Flink, i[1].Blink);
LODWORD(v16) = 4196866;
EtwTraceTimedEvent(3910, 0x40800000ui64, (INT64)&i[1], 8i64, v16, (INT64)v21);
}
else
{
((void(__fastcall *)(_LIST_ENTRY *, _LIST_ENTRY *))v14->Flink)(i[2].Flink, i[1].Blink);
}
--v12;
}
}
KxReleaseSpinLock(&IopTimerLock);
__writecr8(v11);
}
}Referenced by:
No references.