PopDirectedDripsSetDisengageReason

unsigned int __fastcall PopDirectedDripsSetDisengageReason(char a1){
  int v1; 
  signed __int32 v2; 
  unsigned int result; 
  __int64 v4; 
  unsigned int v5; 

  v1 = 1 << a1;
  _m_prefetchw((char *)&stru_140C23628 + 5180);
  v2 = _InterlockedOr((_DWORD *)&stru_140C23628 + 1295, 1 << a1);
  _m_prefetchw((char *)&stru_140C23628 + 5048);
  result = *(&stru_140C23628 + 1262);
  do
  {
    v4 = result;
    v5 = result;
    result = _InterlockedCompareExchange((_DWORD *)&stru_140C23628 + 1262, result, result);
  }
  while( v5 != result );
  if( (result & 1) != 0 && (v2 & v1) == 0 )
    return PopQueueDirectedDripsWork(v4, 2ui64);
  return result;
}

Referenced by:

PnpRequestDeviceAction
PopDirectedDripsNotify
PopDirectedDripsNotifyPnpActionQueueEvent
PopDirectedDripsStartDisengageTimer
PopDripsWatchdogCallbackWorker