Do always set the UserIosb of an irp in IoSecondStageCompletion.
Modified: trunk/reactos/ntoskrnl/io/irp.c

Modified: trunk/reactos/ntoskrnl/io/irp.c
--- trunk/reactos/ntoskrnl/io/irp.c	2005-05-03 21:25:41 UTC (rev 14963)
+++ trunk/reactos/ntoskrnl/io/irp.c	2005-05-03 21:42:35 UTC (rev 14964)
@@ -1265,14 +1265,18 @@
     }
     Irp->MdlAddress = NULL;
     
+    if (Irp->UserIosb)
+    {
+       /*  Save the IOSB Information */
+       *Irp->UserIosb = Irp->IoStatus;
+    }
+
     /* Check for Success but allow failure for Async IRPs */
     if (NT_SUCCESS(Irp->IoStatus.Status) || 
         (Irp->PendingReturned &&
         !(Irp->Flags & IRP_SYNCHRONOUS_API) &&
         (FileObject == NULL || FileObject->Flags & FO_SYNCHRONOUS_IO)))
     {    
-        /*  Save the IOSB Information */
-        *Irp->UserIosb = Irp->IoStatus;
     
         /* Check if there's an event */
         if (Irp->UserEvent)
@@ -1361,9 +1365,7 @@
             /* Check for SYNC IRP */
             if (Irp->Flags & IRP_SYNCHRONOUS_API)
             {
-                /* Set the status in this case only */
-                *Irp->UserIosb = Irp->IoStatus;
-            
+           
                 /* Signal our event if we have one */
                 if (Irp->UserEvent)
                 {