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.