PopDirectedDripsSetDisengageReason
INT64 __fastcall PopDirectedDripsSetDisengageReason(CHAR a1){
int v1;
signed __int32 v2;
INT64 result;
INT64 v4;
int v5;
v1 = 1 << a1;
_m_prefetchw(&dword_140C24A64);
v2 = _InterlockedOr(&dword_140C24A64, 1 << a1);
_m_prefetchw(&PopDirectedDripsState);
LODWORD(result) = PopDirectedDripsState;
do
{
v4 = (unsigned int)result;
v5 = result;
result = (unsigned int)_InterlockedCompareExchange(
(volatile signed __int32 *)&PopDirectedDripsState,
result,
result);
}
while( v5 != (_DWORD)result );
if( (result & 1) != 0 && (v2 & v1) == 0 )
return PopQueueDirectedDripsWork(v4, 2ui64);
return result;
}Referenced by:
PnpRequestDeviceAction
PopDirectedDripsNotify
PopDirectedDripsNotifyPnpActionQueueEvent
PopDirectedDripsStartDisengageTimer
PopDripsWatchdogCallbackWorker