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