PopDirectedDripsHandleResiliencyNotification

INT64 __fastcall PopDirectedDripsHandleResiliencyNotification(INT64 a1){
  volatile INT64 *v1; 
  CHAR v3; 
  int v4; 
  INT64 v5; 
  v1 = (volatile INT64 *)(a1 + 136);
  ExAcquirePushLockExclusiveEx(a1 + 136, 0i64);
  v3 = *(_BYTE *)(a1 + 145);
  v4 = *(_DWORD *)(a1 + 148);
  if( (_InterlockedExchangeAdd64(v1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v1);
  KeAbPostRelease((PVOID)v1);
  if( *(_BYTE *)(a1 + 144) != v3 )
  {
    PopDirectedDripsDiagPnpActionQueueAccountingUpdate(v5, v3);
    if( v3 )
      PopDirectedDripsSuspendDevices((INT32 *)a1);
    else
      PopDirectedDripsResumeDevices((VOID *)a1, 0);
  }
  *(_BYTE *)(a1 + 144) = v3;
  ExAcquirePushLockExclusiveEx((UINT64)v1, 0i64);
  if( *(_DWORD *)(a1 + 148) == v4 )
  {
    *(_BYTE *)(a1 + 152) = 1;
    PopQueueWorkItem(a1 + 160, DelayedWorkQueue);
  }
  if( (_InterlockedExchangeAdd64(v1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v1);
  KeAbPostRelease((PVOID)v1);
  return PopDeepSleepClearDisengageReason(8i64);
}

Referenced by:

PopDirectedDripsWorkerRoutine