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