PopFxNotifySxTransitionState

VOID __stdcall PopFxNotifySxTransitionState(CHAR a1){
  char v1; 
  _WORK_QUEUE_ITEM *v2; 
  char v3; 
  __int64 v4; 

  if( a1 )
  {
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C23628 + 519, 0i64);
    *(&stru_140C23628 + 4176) = 1;
    v1 = _InterlockedExchangeAdd64((_QWORD *)&stru_140C23628 + 519, 0xFFFFFFFFFFFFFFFFui64);
    if( (v1 & 2) != 0 && (v1 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C23628 + 519);
    KeAbPostRelease((char *)&stru_140C23628 + 4152);
    KeWaitForSingleObject((UINT64)&stru_140C23628 + 4184, 0, 0, 0, 0i64);
  }
  else
  {
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C23628 + 519, 0i64);
    *(&stru_140C23628 + 4176) = 0;
    while( 1 )
    {
      v2 = (_WORK_QUEUE_ITEM *)*(&stru_140C23628 + 520);
      if( (_UNKNOWN *)*(&stru_140C23628 + 520) == (_UNKNOWN *)((char *)&stru_140C23628 + 4160) )
        break;
      if( *(_UNKNOWN **)(*(&stru_140C23628 + 520) + 8i64) != (_UNKNOWN *)((char *)&stru_140C23628 + 4160)
        || (v4 = **(&stru_140C23628 + 520), *(_QWORD *)(**(&stru_140C23628 + 520) + 8i64) != *(&stru_140C23628 + 520)) )
      {
        __fastfail(3u);
      }
      *(&stru_140C23628 + 520) = **(&stru_140C23628 + 520);
      *(_QWORD *)(v4 + 8) = (char *)&stru_140C23628 + 4160;
      ExQueueWorkItem(v2 + 1, DelayedWorkQueue);
    }
    v3 = _InterlockedExchangeAdd64((_QWORD *)&stru_140C23628 + 519, 0xFFFFFFFFFFFFFFFFui64);
    if( (v3 & 2) != 0 && (v3 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C23628 + 519);
    KeAbPostRelease((char *)&stru_140C23628 + 4152);
  }
}

Referenced by:

PoBroadcastSystemState