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