PfSnTraceTimerRoutine
VOID __fastcall PfSnTraceTimerRoutine(KDPC *Dpc, VOID *DeferredContext, VOID *SystemArgument1, VOID *SystemArgument2){
int v5;
int v6;
unsigned __int64 *v7;
bool v8;
unsigned __int64 *a3;
a3 = 0i64;
if( *((_DWORD *)DeferredContext + 100) )
goto LABEL_12;
v5 = *((_DWORD *)DeferredContext + 83);
if( v5 > *((_DWORD *)DeferredContext + 85) )
v5 = *((_DWORD *)DeferredContext + 85);
v6 = *((_DWORD *)DeferredContext + 81);
if( v6 > v5 )
v6 = v5;
*((_DWORD *)DeferredContext + (*((_DWORD *)DeferredContext + 82))++ + 71) = v5 - v6;
*((_DWORD *)DeferredContext + 81) = v5;
if( (int)PfSnTraceGetLogEntry((INT64)DeferredContext, 1ui64, &a3) < 0 )
{
v8 = _InterlockedCompareExchange((volatile signed __int32 *)DeferredContext + 100, 10, 0) == 0;
}
else
{
v7 = a3;
*a3 &= 7ui64;
v7[1] = 0i64;
*v7 = *v7 & 0xFFFFFFFFFFFFFFF8ui64 | 4;
if( *((_DWORD *)DeferredContext + 82) < dword_140C4FFF4 )
{
KxAcquireSpinLock((UINT64 *)DeferredContext + 34);
if( !*((_DWORD *)DeferredContext + 100) && ExAcquireRundownProtection((PEX_RUNDOWN_REF)DeferredContext + 45) )
KiSetTimerEx(
(_KTIMER *)((char *)DeferredContext + 136),
*(_LARGE_INTEGER *)((char *)DeferredContext + 200),
0i64,
0,
(_KDPC *)((char *)DeferredContext + 208));
KxReleaseSpinLock((UINT64 *)DeferredContext + 34);
goto LABEL_12;
}
v8 = _InterlockedCompareExchange((volatile signed __int32 *)DeferredContext + 100, 4, 0) == 0;
}
if( v8 )
ExQueueWorkItem((WORK_QUEUE_ITEM *)((char *)DeferredContext + 368), DelayedWorkQueue);
LABEL_12:
ExReleaseRundownProtection((PEX_RUNDOWN_REF)DeferredContext + 45);
}Referenced by:
No references.