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.