[SHELL32] Remove 2 redundant initializations
[reactos.git] / drivers / usb / usbccgp / fdo.c
index 198dec3..833893b 100644 (file)
@@ -46,7 +46,7 @@ FDO_QueryCapabilities(
     /* Init event */
     KeInitializeEvent(&Event, NotificationEvent, FALSE);
 
-    /* Now allocte the irp */
+    /* Now allocate the irp */
     Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
     if (!Irp)
     {
@@ -119,7 +119,7 @@ FDO_DeviceRelations(
     if (IoStack->Parameters.QueryDeviceRelations.Type != BusRelations)
     {
         /* FDO always only handles bus relations */
-        return USBCCGP_SyncForwardIrp(FDODeviceExtension->NextDeviceObject, Irp);
+        return STATUS_SUCCESS;
     }
 
     /* Go through array and count device objects */
@@ -159,6 +159,7 @@ FDO_DeviceRelations(
 
     /* Store result */
     Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations;
+    Irp->IoStatus.Status = STATUS_SUCCESS;
 
     /* Request completed successfully */
     return STATUS_SUCCESS;
@@ -223,7 +224,7 @@ FDO_CreateChildPdo(
         PDODeviceExtension->ConfigurationHandle = FDODeviceExtension->ConfigurationHandle;
         PDODeviceExtension->ConfigurationDescriptor = FDODeviceExtension->ConfigurationDescriptor;
         RtlCopyMemory(&PDODeviceExtension->Capabilities, &FDODeviceExtension->Capabilities, sizeof(DEVICE_CAPABILITIES));
-        RtlCopyMemory(&PDODeviceExtension->DeviceDescriptor, &FDODeviceExtension->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR));
+        RtlCopyMemory(&PDODeviceExtension->DeviceDescriptor, FDODeviceExtension->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR));
 
         /* Patch the stack size */
         PDODeviceObject->StackSize = DeviceObject->StackSize + 1;
@@ -252,7 +253,14 @@ FDO_StartDevice(
     ASSERT(FDODeviceExtension->Common.IsFDO);
 
     /* First start lower device */
-    Status = USBCCGP_SyncForwardIrp(FDODeviceExtension->NextDeviceObject, Irp);
+    if (IoForwardIrpSynchronously(FDODeviceExtension->NextDeviceObject, Irp))
+    {
+        Status = Irp->IoStatus.Status;
+    }
+    else
+    {
+        Status = STATUS_UNSUCCESSFUL;
+    }
 
     if (!NT_SUCCESS(Status))
     {
@@ -338,6 +346,13 @@ FDO_CloseConfiguration(
     FDODeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
     ASSERT(FDODeviceExtension->Common.IsFDO);
 
+    /* Nothing to do if we're not configured */
+    if (FDODeviceExtension->ConfigurationDescriptor == NULL ||
+        FDODeviceExtension->InterfaceList == NULL)
+    {
+        return STATUS_SUCCESS;
+    }
+
     /* Now allocate the urb */
     Urb = USBD_CreateConfigurationRequestEx(FDODeviceExtension->ConfigurationDescriptor,
                                             FDODeviceExtension->InterfaceList);
@@ -389,16 +404,15 @@ FDO_HandlePnp(
             FDO_CloseConfiguration(DeviceObject);
 
             /* Send the IRP down the stack */
-            Status = USBCCGP_SyncForwardIrp(FDODeviceExtension->NextDeviceObject,
-                                            Irp);
-            if (NT_SUCCESS(Status))
-            {
-                /* Detach from the device stack */
-                IoDetachDevice(FDODeviceExtension->NextDeviceObject);
+            Irp->IoStatus.Status = STATUS_SUCCESS;
+            IoSkipCurrentIrpStackLocation(Irp);
+            Status = IoCallDriver(FDODeviceExtension->NextDeviceObject, Irp);
 
-                /* Delete the device object */
-                IoDeleteDevice(DeviceObject);
-            }
+            /* Detach from the device stack */
+            IoDetachDevice(FDODeviceExtension->NextDeviceObject);
+
+            /* Delete the device object */
+            IoDeleteDevice(DeviceObject);
 
             /* Request completed */
             break;
@@ -413,7 +427,14 @@ FDO_HandlePnp(
         {
             /* Handle device relations */
             Status = FDO_DeviceRelations(DeviceObject, Irp);
-            break;
+            if (!NT_SUCCESS(Status))
+            {
+                break;
+            }
+
+            /* Forward irp to next device object */
+            IoSkipCurrentIrpStackLocation(Irp);
+            return IoCallDriver(FDODeviceExtension->NextDeviceObject, Irp);
         }
         case IRP_MN_QUERY_CAPABILITIES:
         {
@@ -421,11 +442,15 @@ FDO_HandlePnp(
             RtlCopyMemory(IoStack->Parameters.DeviceCapabilities.Capabilities,
                           &FDODeviceExtension->Capabilities,
                           sizeof(DEVICE_CAPABILITIES));
-            Status = USBCCGP_SyncForwardIrp(FDODeviceExtension->NextDeviceObject, Irp);
-            if (NT_SUCCESS(Status))
+            Status = STATUS_UNSUCCESSFUL;
+
+            if (IoForwardIrpSynchronously(FDODeviceExtension->NextDeviceObject, Irp))
             {
-                /* Surprise removal ok */
-                IoStack->Parameters.DeviceCapabilities.Capabilities->SurpriseRemovalOK = TRUE;
+                Status = Irp->IoStatus.Status;
+                if (NT_SUCCESS(Status))
+                {
+                    IoStack->Parameters.DeviceCapabilities.Capabilities->SurpriseRemovalOK = TRUE;
+                }
             }
             break;
        }
@@ -513,7 +538,7 @@ FDO_HandleResetCyclePort(
         KeReleaseSpinLock(&FDODeviceExtension->Lock, OldLevel);
 
         /* Forward request synchronized */
-        USBCCGP_SyncForwardIrp(FDODeviceExtension->NextDeviceObject, Irp);
+        NT_VERIFY(IoForwardIrpSynchronously(FDODeviceExtension->NextDeviceObject, Irp));
 
         /* Reacquire lock */
         KeAcquireSpinLock(&FDODeviceExtension->Lock, &OldLevel);