PopDirectedDripsSuspendDevices

NTSTATUS __stdcall PopDirectedDripsSuspendDevices(INT32 *a1){
  __int64 v2; 
  signed __int32 v3; 
  signed __int32 v4; 
  __int16 v5; 
  NTSTATUS v6; 
  NTSTATUS v7; 
  NTSTATUS v8; 
  signed __int32 v9; 
  signed __int32 v10; 

  v2 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  _m_prefetchw(a1);
  v3 = *a1;
  do
  {
    v4 = v3;
    v3 = _InterlockedCompareExchange(a1, v3, v3);
  }
  while( v4 != v3 );
  v5 = v3;
  if( a1[32] || (v3 & 0x3000) == 0 || (v3 & 0x10) != 0 )
  {
    v6 = -1073741823;
LABEL_16:
    if( v6 >= 0 )
      goto LABEL_22;
    goto LABEL_17;
  }
  if( (v3 & 0x808) == 2048 )
  {
    v6 = -1073741536;
    goto LABEL_17;
  }
  _m_prefetchw(a1);
  if( (_InterlockedOr(a1, 0x40u) & 0x40) == 0 )
    PopAcquireTransitionLock();
  a1[21] = 0;
  a1[15] = 1;
  a1[16] = 5;
  a1[17] = 5;
  a1[20] = a1[14];
  a1[18] = 1;
  a1[19] = 2;
  v7 = PopDirectedDripsInitializeBroadcast(a1);
  v6 = v7;
  if( v7 < 0 )
  {
    a1[30] = v7;
    goto LABEL_16;
  }
  _InterlockedOr(a1, 0x80u);
  if( (v5 & 0x800) != 0 )
  {
    *((_BYTE *)a1 + 86) = 3;
    PoBroadcastSystemState((PO_BROADCAST_SYSTEM_STATE *)(a1 + 15));
  }
  *((_BYTE *)a1 + 564) = 0;
  *((_BYTE *)a1 + 86) = 2;
  v8 = PoBroadcastSystemState((PO_BROADCAST_SYSTEM_STATE *)(a1 + 15));
  a1[30] = v8;
  v6 = v8;
  if( v8 >= 0 )
  {
    _InterlockedOr(a1, 0x10u);
    _InterlockedAnd(a1, 0xFFFFFFDF);
    ++a1[31];
    v6 = 0;
    goto LABEL_22;
  }
LABEL_17:
  _m_prefetchw(a1);
  v9 = *a1;
  do
  {
    v10 = v9;
    v9 = _InterlockedCompareExchange(a1, v9, v9);
  }
  while( v10 != v9 );
  if( (v9 & 0x80u) != 0 )
  {
    PopDirectedDripsDestroyBroadcast();
    _InterlockedAnd(a1, 0xFFFFFF7F);
  }
  PopDirectedDripsReleaseTransitionLock(a1);
LABEL_22:
  PopDirectedDripsDiagTraceNotifyDevices(
    1u,
    (unsigned int)v6,
    (NPTEXTMETRIC *)((*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v2) / 0x989680ui64));
  return v6;
}

Referenced by:

PopDirectedDripsHandleResiliencyNotification
PopDirectedDripsWorkerRoutine