PopTimeoutWakeTracking

__int64 __fastcall PopTimeoutWakeTracking(_LIST_ENTRY *a1, __int64 a2, INT64 a3){
  int *v4; 
  _LIST_ENTRY *v5; 
  __int64 result; 
  __int64 i; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  int v9[2]; 
  __int64 v10[2]; 

  v9[0] = 393217;
  v9[1] = 0;
  v10[1] = (__int64)v10;
  v4 = 0i64;
  v10[0] = (__int64)v10;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
  if( a1 == (_LIST_ENTRY *)*(&stru_140C23628 + 357) )
  {
    *(&stru_140C23628 + 357) = 0i64;
    *(&stru_140C23628 + 356) = a1;
    if( *(&stru_140C23628 + 2904) )
    {
      for( i = *(&stru_140C23628 + 362);
            (_UNKNOWN *)i != (_UNKNOWN *)((char *)&stru_140C23628 + 2888);
            i = *(_QWORD *)(i + 8) )
      {
        if( *(_LIST_ENTRY **)(i + 24) == a1 )
        {
          *(_QWORD *)(i + 32) = v9;
          v4 = v9;
          break;
        }
      }
    }
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( v4 )
      KeWaitForSingleObject((UINT64)v4, 0, 0, 0, 0i64);
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
    if( a1 == (_LIST_ENTRY *)*(&stru_140C23628 + 356) )
    {
      v5 = (_LIST_ENTRY *)*(&stru_140C23628 + 359);
      if( *(_UNKNOWN **)(*(&stru_140C23628 + 359) + 8i64) != (_UNKNOWN *)((char *)&stru_140C23628 + 2872) )
        __fastfail(3u);
      ++*(&stru_140C23628 + 708);
      *(&stru_140C23628 + 356) = 0i64;
      a1->Blink = (_LIST_ENTRY *)((char *)&stru_140C23628 + 2872);
      a1->Flink = v5;
      v5->Blink = a1;
      *(&stru_140C23628 + 359) = a1;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      PopFinalizeWakeInfo((__int64)a1);
      KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
    }
  }
  PopWakeInfoDereference((__int64)a1);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  return result;
}

Referenced by:

PopWakeSourceTimeoutWorker