PopHandleWakeSources

VOID __stdcall PopHandleWakeSources(){
  int v0; 
  unsigned int v1; 
  __int64 v2; 
  VOID *v3; 
  _POP_WAKE_SOURCE *v4; 
  _POP_WAKE_SOURCE **v5; 
  __int64 *v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT8 v8; 

  v0 = 0;
  v8 = 0;
  v1 = 4;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( (*(&stru_140C23628 + 582) & 0x200000) == 0 && (*(&stru_140C23628 + 2960) & 1) == 0 )
  {
    if( (*(&stru_140C23628 + 582) & 0x400000) == 0 && (*(&stru_140C23628 + 2960) & 2) == 0 )
    {
      if( PopValidateRTCWake(&v8) && (*(&stru_140C23628 + 582) & 0x100000) == 0 )
        v0 = 4;
    }
    else
    {
      v0 = 2;
    }
  }
  else
  {
    v0 = 1;
  }
  PopAcquireWakeSourceSpinLock(&LockHandle);
  v2 = *(&stru_140C23628 + 357);
  if( *(&stru_140C23628 + 357) && !v0 )
    PopWakeInfoReference(*(&stru_140C23628 + 357));
  PopReleaseWakeSourceSpinLock(&LockHandle);
  if( !v2 )
  {
    KeSetEvent((PRKEVENT)((char *)&stru_140C23628 + 2936), 0, 0);
    return;
  }
  if( !v0 )
  {
    KeInitializeDpc((PRKDPC)(v2 + 48), PopWakeSourceTimeoutDpc, 0i64);
    KeInitializeTimerEx(v2 + 112, 0);
    KiSetTimerEx((_KTIMER *)(v2 + 112), (_LARGE_INTEGER)-20000000i64, 0i64, 0, (_KDPC *)(v2 + 48));
    return;
  }
  if( dword_140C232C0 < 0 || (unsigned __int64)dword_140C232C0 >= 3 )
    v3 = 0i64;
  else
    v3 = (VOID *)qword_140C232D8[3 * dword_140C232C0];
  if( v0 == 4 )
  {
    if( (unsigned __int64)v3 <= 0xFFFFFFFFFFFFFFFCui64 )
      v1 = (v8 != 0) + 2;
  }
  else
  {
    v1 = 1;
  }
  v4 = PopNewWakeSource(v1);
  PopAcquireWakeSourceSpinLock(&LockHandle);
  *(&stru_140C23628 + 357) = 0i64;
  PopReleaseWakeSourceSpinLock(&LockHandle);
  PopUnlinkWakeSources(v2);
  if( v4 )
  {
    if( (unsigned int)(v4[4] - 2) <= 1 )
    {
      ExCopyWakeTimerInfo(v3, (_DIAGNOSTIC_BUFFER **)v4 + 3);
    }
    else if( v3 == (VOID *)-1i64 )
    {
      v4[6] = 0;
    }
    else if( v3 == (VOID *)-2i64 )
    {
      v4[6] = 1;
    }
    else
    {
      if( v3 == (VOID *)-3i64 )
        v0 = 2;
      v4[6] = v0;
    }
    v5 = *(_POP_WAKE_SOURCE ***)(v2 + 32);
    if( *v5 != (_POP_WAKE_SOURCE *)(v2 + 24) )
LABEL_37:
      __fastfail(3u);
    *(_QWORD *)v4 = v2 + 24;
    *((_QWORD *)v4 + 1) = v5;
    *v5 = v4;
    *(_QWORD *)(v2 + 32) = v4;
    *(_DWORD *)(v2 + 40) = 1;
  }
  PopAcquireWakeSourceSpinLock(&LockHandle);
  v6 = (__int64 *)*(&stru_140C23628 + 360);
  if( (_UNKNOWN *)**(&stru_140C23628 + 360) != (_UNKNOWN *)((char *)&stru_140C23628 + 2872) )
    goto LABEL_37;
  ++*(&stru_140C23628 + 708);
  *(_QWORD *)v2 = (char *)&stru_140C23628 + 2872;
  *(_QWORD *)(v2 + 8) = v6;
  *v6 = v2;
  *(&stru_140C23628 + 360) = v2;
  PopReleaseWakeSourceSpinLock(&LockHandle);
  PopFinalizeWakeInfo(v2);
}

Referenced by:

PoBroadcastSystemState