ExpTimerApcRoutine
NTSTATUS __fastcall ExpTimerApcRoutine(__int64 a1, _QWORD *a2){
_ETHREAD *CurrentThread;
__int64 v3;
unsigned __int64 v5;
__int64 v6;
_QWORD *v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = a1 - 72;
v5 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 - 72 + 64));
if( (*(_BYTE *)(v3 + 304) & 1) != 0 && CurrentThread == *(_ETHREAD **)(v3 + 80) )
{
if( !*(_DWORD *)(v3 + 240) )
{
KxAcquireSpinLock(&CurrentThread->ActiveTimerListLock);
v6 = *(_QWORD *)(v3 + 224);
v7 = *(_QWORD **)(v3 + 232);
if( *(_QWORD *)(v6 + 8) != v3 + 224 || *v7 != v3 + 224 )
__fastfail(3u);
*v7 = v6;
*(_QWORD *)(v6 + 8) = v7;
KxReleaseSpinLock(&CurrentThread->ActiveTimerListLock);
*(_BYTE *)(v3 + 304) &= ~1u;
}
}
else
{
*a2 = 0i64;
}
KxReleaseSpinLock((UINT64 *)(v3 + 64));
__writecr8(v5);
return ObfDereferenceObjectWithTag((VOID *)v3, 0x746C6644ui64);
}Referenced by:
No references.