PopDirectedDripsResumeDevices
NTSTATUS __stdcall PopDirectedDripsResumeDevices(VOID *a1){
char v1;
char v2;
__int64 v4;
signed __int32 v5;
signed __int32 v6;
__int16 v7;
signed __int32 v8;
signed __int32 v9;
NTSTATUS result;
v2 = v1;
v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
_m_prefetchw(a1);
v5 = *(_DWORD *)a1;
do
{
v6 = v5;
v5 = _InterlockedCompareExchange((volatile signed __int32 *)a1, v5, v5);
}
while( v6 != v5 );
v7 = v5;
if( (v5 & 0x10) != 0 )
{
*((_BYTE *)a1 + 85) = 1;
PoBroadcastSystemState((PO_BROADCAST_SYSTEM_STATE *)((char *)a1 + 60));
_InterlockedOr((volatile signed __int32 *)a1, 0x20u);
}
if( (v7 & 0x80u) != 0 )
PopDirectedDripsDestroyBroadcast();
if( !v2 && (v7 & 0x200) == 0 )
{
_m_prefetchw(&PopDirectedDripsUmTestDeviceCount);
v8 = PopDirectedDripsUmTestDeviceCount;
do
{
v9 = v8;
v8 = _InterlockedCompareExchange(&PopDirectedDripsUmTestDeviceCount, v8, v8);
}
while( v9 != v8 );
if( !v8 )
PopFxClearDirectedDripsCandidateDeviceList();
}
_InterlockedAnd((volatile signed __int32 *)a1, 0xFFFFFF6F);
if( !v2 )
PopDirectedDripsReleaseTransitionLock(a1);
PopDirectedDripsDiagTraceNotifyDevices(
0,
0i64,
(NPTEXTMETRIC *)((*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v4) / 0x989680ui64));
return result;
}Referenced by:
PopDirectedDripsHandleResiliencyNotification
PopDirectedDripsWorkerRoutine