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