PnpDeviceCompletionRoutine

__int64 __fastcall PnpDeviceCompletionRoutine(__int64 a1, _IRP *a2, __int64 a3){
  __int64 DriverObject; 
  __int64 v6; 
  _DEVICE_OBJECT *DeviceThatFailedIrp; 

  DriverObject = 0i64;
  *(_QWORD *)(*(_QWORD *)(a3 + 16) + 72i64) = 0i64;
  if( a2->PendingReturned )
    *(_DWORD *)(a3 + 36) = 1;
  *(_QWORD *)(a3 + 48) = a2->IoStatus.Information;
  *(_DWORD *)(a3 + 40) = a2->IoStatus.Status;
  _InterlockedIncrement((volatile signed __int32 *)(a3 + 56));
  if( *(int *)(a3 + 40) < 0 )
  {
    DeviceThatFailedIrp = IoFindDeviceThatFailedIrp(a2);
    if( DeviceThatFailedIrp )
      DriverObject = (__int64)DeviceThatFailedIrp->DriverObject;
  }
  PnpDeviceCompletionQueueDispatchedEntryCompleted(a1, (_LIST_ENTRY *)a3);
  v6 = *(_QWORD *)(a3 + 16);
  if( *(_DWORD *)(a3 + 32) == 781 )
    PnpDiagnosticTraceObject(&KMPnPEvt_DeviceEnum_Stop, (unsigned __int16 *)(v6 + 40));
  else
    PnpTraceStartDevice(v6, *(_DWORD *)(a3 + 40), DriverObject);
  PnpDeviceCompletionRequestDestroy((VOID *)a3);
  IoFreeIrp(a2);
  return 3221225494i64;
}

Referenced by:

No references.