PopDirectedDripsHandleResiliencyNotification

NTSTATUS __stdcall PopDirectedDripsHandleResiliencyNotification(INT64 a1){
  _EX_PUSH_LOCK *v1; 
  CHAR v3; 
  int v4; 
  INT64 v5; 
  NTSTATUS result; 

  v1 = (_EX_PUSH_LOCK *)(a1 + 136);
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 136), 0i64);
  v3 = *(_BYTE *)(a1 + 145);
  v4 = *(_DWORD *)(a1 + 148);
  if( (_InterlockedExchangeAdd64(&v1->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v1);
  KeAbPostRelease(v1);
  if( *(_BYTE *)(a1 + 144) != v3 )
  {
    PopDirectedDripsDiagPnpActionQueueAccountingUpdate(v5, v3);
    if( v3 )
      PopDirectedDripsSuspendDevices((INT32 *)a1);
    else
      PopDirectedDripsResumeDevices((VOID *)a1);
  }
  *(_BYTE *)(a1 + 144) = v3;
  ExAcquirePushLockExclusiveEx(v1, 0i64);
  if( *(_DWORD *)(a1 + 148) == v4 )
  {
    *(_BYTE *)(a1 + 152) = 1;
    PopQueueWorkItem((_POP_WORK_ITEM *)(a1 + 160));
  }
  if( (_InterlockedExchangeAdd64(&v1->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v1);
  KeAbPostRelease(v1);
  PopDeepSleepClearDisengageReason(PopDeepSleepDisengageReasonDirectedDripsTransition);
  return result;
}

Referenced by:

PopDirectedDripsWorkerRoutine