diff --git a/reactos/drivers/filesystems/npfs/fsctrl.c b/reactos/drivers/filesystems/npfs/fsctrl.c index 0898390f3dd..e1bcf1dafb9 100644 --- a/reactos/drivers/filesystems/npfs/fsctrl.c +++ b/reactos/drivers/filesystems/npfs/fsctrl.c @@ -183,11 +183,13 @@ NpfsConnectPipe(PIRP Irp, if (Flags & FO_SYNCHRONOUS_IO) { - KeWaitForSingleObject(&Ccb->ConnectEvent, + Status = KeWaitForSingleObject(&Ccb->ConnectEvent, UserRequest, Irp->RequestorMode, (Flags & FO_ALERTABLE_IO), NULL); + if ((Status == STATUS_USER_APC) || (Status == STATUS_KERNEL_APC) || (Status == STATUS_ALERTED)) + Status = STATUS_CANCELLED; } DPRINT("NpfsConnectPipe() done (Status %lx)\n", Status); @@ -403,11 +405,13 @@ NpfsWaitPipe(PIRP Irp, TimeOut = NULL; } - Status = KeWaitForSingleObject(&Ccb->ConnectEvent, - UserRequest, - Irp->RequestorMode, - (Ccb->FileObject->Flags & FO_ALERTABLE_IO), - TimeOut); + Status = KeWaitForSingleObject(&Ccb->ConnectEvent, + UserRequest, + Irp->RequestorMode, + (Ccb->FileObject->Flags & FO_ALERTABLE_IO), + TimeOut); + if ((Status == STATUS_USER_APC) || (Status == STATUS_KERNEL_APC) || (Status == STATUS_ALERTED)) + Status = STATUS_CANCELLED; DPRINT("KeWaitForSingleObject() returned (Status %lx)\n", Status); @@ -526,6 +530,8 @@ NpfsWaitPipe2(PIRP Irp, Irp->RequestorMode, (Ccb->FileObject->Flags & FO_ALERTABLE_IO), &TimeOut); + if ((Status == STATUS_USER_APC) || (Status == STATUS_KERNEL_APC) || (Status == STATUS_ALERTED)) + Status = STATUS_CANCELLED; DPRINT("KeWaitForSingleObject() returned (Status %lx)\n", Status); diff --git a/reactos/drivers/filesystems/npfs/rw.c b/reactos/drivers/filesystems/npfs/rw.c index 1b29ce6ff8e..a8fdaf68df3 100644 --- a/reactos/drivers/filesystems/npfs/rw.c +++ b/reactos/drivers/filesystems/npfs/rw.c @@ -373,20 +373,11 @@ NpfsRead(IN PDEVICE_OBJECT DeviceObject, KeInitializeEvent(&Event, SynchronizationEvent, FALSE); Context->WaitEvent = &Event; ExReleaseFastMutex(&Ccb->DataListLock); - Status = KeWaitForSingleObject(&Event, - UserRequest, - Irp->RequestorMode, - (FileObject->Flags & FO_ALERTABLE_IO), + KeWaitForSingleObject(&Event, + Executive, + KernelMode, + FALSE, NULL); - if ((Status == STATUS_USER_APC) || (Status == STATUS_KERNEL_APC) || (Status == STATUS_ALERTED)) - { - Status = STATUS_CANCELLED; - goto done; - } - if (!NT_SUCCESS(Status)) - { - ASSERT(FALSE); - } ExAcquireFastMutex(&Ccb->DataListLock); } Irp->IoStatus.Information = 0; @@ -662,9 +653,6 @@ NpfsRead(IN PDEVICE_OBJECT DeviceObject, ASSERT(IoGetCurrentIrpStackLocation(Irp)->FileObject != NULL); - if (Status == STATUS_CANCELLED) - goto done; - if (IoIsOperationSynchronous(Irp)) { RemoveEntryList(&Context->ListEntry);