PopFxNotifySxTransitionState

VOID __fastcall PopFxNotifySxTransitionState(CHAR a1){
  char v1; 
  WORK_QUEUE_ITEM *v2; 
  char v3; 
  __int64 v4; 
  if( a1 )
  {
    ExAcquirePushLockExclusiveEx((UINT64)&PopFxUpdateDripsConstraintContext, 0i64);
    byte_140C24678 = 1;
    v1 = _InterlockedExchangeAdd64(
           (volatile signed __int64 *)&PopFxUpdateDripsConstraintContext,
           0xFFFFFFFFFFFFFFFFui64);
    if( (v1 & 2) != 0 && (v1 & 4) == 0 )
      ExfTryToWakePushLock((volatile INT64 *)&PopFxUpdateDripsConstraintContext);
    KeAbPostRelease(&PopFxUpdateDripsConstraintContext);
    KeWaitForSingleObject(&stru_140C24680, Executive, 0, 0, 0i64);
  }
  else
  {
    ExAcquirePushLockExclusiveEx((UINT64)&PopFxUpdateDripsConstraintContext, 0i64);
    byte_140C24678 = 0;
    while( 1 )
    {
      v2 = (WORK_QUEUE_ITEM *)qword_140C24668;
      if( (__int64 *)qword_140C24668 == &qword_140C24668 )
        break;
      if( *(__int64 **)(qword_140C24668 + 8) != &qword_140C24668
        || (v4 = *(_QWORD *)qword_140C24668, *(_QWORD *)(*(_QWORD *)qword_140C24668 + 8i64) != qword_140C24668) )
      {
        __fastfail(3u);
      }
      qword_140C24668 = *(_QWORD *)qword_140C24668;
      *(_QWORD *)(v4 + 8) = &qword_140C24668;
      ExQueueWorkItem(v2 + 1, DelayedWorkQueue);
    }
    v3 = _InterlockedExchangeAdd64(
           (volatile signed __int64 *)&PopFxUpdateDripsConstraintContext,
           0xFFFFFFFFFFFFFFFFui64);
    if( (v3 & 2) != 0 && (v3 & 4) == 0 )
      ExfTryToWakePushLock((volatile INT64 *)&PopFxUpdateDripsConstraintContext);
    KeAbPostRelease(&PopFxUpdateDripsConstraintContext);
  }
}

Referenced by:

PoBroadcastSystemState