PopTimeoutWakeTracking

INT64 __fastcall PopTimeoutWakeTracking(INT64 *a1){
  int *v2; 
  INT64 v3; 
  INT64 result; 
  __int64 i; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  int v7[2]; 
  __int64 v8[2]; 
  v7[0] = 393217;
  v7[1] = 0;
  v8[1] = (__int64)v8;
  v2 = 0i64;
  v8[0] = (__int64)v8;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&PopWakeSourceLock, &LockHandle);
  if( a1 == (INT64 *)PopCurrentWakeInfo )
  {
    PopCurrentWakeInfo = 0i64;
    PopPendingWakeInfo = (__int64)a1;
    if( PopWakeSourceWorkInProgress )
    {
      for( i = qword_140C24178; (PVOID *)i != &PopWakeSourceWorkList; i = *(_QWORD *)(i + 8) )
      {
        if( *(INT64 **)(i + 24) == a1 )
        {
          *(_QWORD *)(i + 32) = v7;
          v2 = v7;
          break;
        }
      }
    }
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( v2 )
      KeWaitForSingleObject(v2, Executive, 0, 0, 0i64);
    KeAcquireInStackQueuedSpinLock(&PopWakeSourceLock, &LockHandle);
    if( a1 == (INT64 *)PopPendingWakeInfo )
    {
      v3 = PopWakeInfoList;
      if( *(__int64 **)(PopWakeInfoList + 8) != &PopWakeInfoList )
        __fastfail(3u);
      ++PopWakeInfoCount;
      PopPendingWakeInfo = 0i64;
      a1[1] = (INT64)&PopWakeInfoList;
      *a1 = v3;
      *(_QWORD *)(v3 + 8) = a1;
      PopWakeInfoList = (__int64)a1;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      PopFinalizeWakeInfo((INT64)a1);
      KeAcquireInStackQueuedSpinLock(&PopWakeSourceLock, &LockHandle);
    }
  }
  PopWakeInfoDereference((INT64)a1);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  return result;
}

Referenced by:

PopWakeSourceTimeoutWorker