Author: vmikayelyan Date: Fri Aug 19 16:13:09 2016 New Revision: 72375
URL: http://svn.reactos.org/svn/reactos?rev=72375&view=rev Log: usb: hub: FDO: Fix PnP handling issues.
There is many cases where we should forward IRP instead of complete it.
Modified: branches/GSoC_2016/USB/drivers/usb/usbhub/fdo.c
Modified: branches/GSoC_2016/USB/drivers/usb/usbhub/fdo.c URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2016/USB/drivers/usb/usbhub... ============================================================================== --- branches/GSoC_2016/USB/drivers/usb/usbhub/fdo.c [iso-8859-1] (original) +++ branches/GSoC_2016/USB/drivers/usb/usbhub/fdo.c [iso-8859-1] Fri Aug 19 16:13:09 2016 @@ -2028,7 +2028,10 @@ { Status = USBHUB_ParentFDOStartDevice(DeviceObject, Irp); } - break; + + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; }
case IRP_MN_QUERY_DEVICE_RELATIONS: @@ -2059,17 +2062,17 @@
Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations; Irp->IoStatus.Status = Status; - return ForwardIrpAndForget(DeviceObject, Irp); + break; } case RemovalRelations: { DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n"); - return ForwardIrpAndForget(DeviceObject, Irp); + break; } default: DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n", Stack->Parameters.QueryDeviceRelations.Type); - return ForwardIrpAndForget(DeviceObject, Irp); + break; } break; } @@ -2078,10 +2081,11 @@ { DPRINT("IRP_MN_QUERY_STOP_DEVICE\n"); Irp->IoStatus.Status = STATUS_SUCCESS; - return ForwardIrpAndForget(DeviceObject, Irp); + break; } case IRP_MN_REMOVE_DEVICE: { + // Should be reworked later in this commits set DPRINT("IRP_MN_REMOVE_DEVICE\n"); Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(Irp, IO_NO_INCREMENT); @@ -2093,29 +2097,33 @@ } case IRP_MN_QUERY_BUS_INFORMATION: { + // Function drivers and filter drivers do not handle this IRP. DPRINT("IRP_MN_QUERY_BUS_INFORMATION\n"); break; } case IRP_MN_QUERY_ID: { DPRINT("IRP_MN_QUERY_ID\n"); + // Function drivers and filter drivers do not handle this IRP. break; } case IRP_MN_QUERY_CAPABILITIES: { + // + // If a function or filter driver does not handle this IRP, it + // should pass that down. + // DPRINT("IRP_MN_QUERY_CAPABILITIES\n"); break; } default: { DPRINT(" IRP_MJ_PNP / unknown minor function 0x%lx\n", Stack->MinorFunction); - return ForwardIrpAndForget(DeviceObject, Irp); - } - } - - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + break; + } + } + + return ForwardIrpAndForget(DeviceObject, Irp); }
NTSTATUS