PnpDeviceCompletionRoutine

INT64 __stdcall PnpDeviceCompletionRoutine(_DEVICE_OBJECT *DeviceObject, _IRP *Irp, PVOID Context){
  __int64 v3; 
  __int64 v6; 
  DEVICE_OBJECT *DeviceThatFailedIrp; 
  v3 = 0i64;
  *(_QWORD *)(*((_QWORD *)Context + 2) + 72i64) = 0i64;
  if( *((_BYTE *)Irp + 65) )
    *((_DWORD *)Context + 9) = 1;
  *((_QWORD *)Context + 6) = *((_QWORD *)Irp + 7);
  *((_DWORD *)Context + 10) = *((_DWORD *)Irp + 12);
  _InterlockedIncrement((volatile signed __int32 *)Context + 14);
  if( *((int *)Context + 10) < 0 )
  {
    DeviceThatFailedIrp = IoFindDeviceThatFailedIrp(Irp);
    if( DeviceThatFailedIrp )
      v3 = *((_QWORD *)DeviceThatFailedIrp + 1);
  }
  PnpDeviceCompletionQueueDispatchedEntryCompleted((_PNP_DEVICE_COMPLETION_QUEUE *)DeviceObject, (_LIST_ENTRY *)Context);
  v6 = *((_QWORD *)Context + 2);
  if( *((_DWORD *)Context + 8) == 781 )
    PnpDiagnosticTraceObject(&KMPnPEvt_DeviceEnum_Stop, (_UNICODE_STRING *)(v6 + 40));
  else
    PnpTraceStartDevice(v6, *((_DWORD *)Context + 10), v3);
  PnpDeviceCompletionRequestDestroy((INT64)Context);
  IoFreeIrp(Irp);
  return 3221225494i64;
}

Referenced by:

No references.