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) {