From 3f98d1cb0173281748a2f3f27214d037400f87e0 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Thu, 10 Mar 2016 00:23:43 -0800 Subject: [PATCH] sys: FspFsvolDeviceStoppedStatus --- src/sys/driver.h | 10 +++++++--- src/sys/write.c | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sys/driver.h b/src/sys/driver.h index 1777db96..7e0e9288 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -147,7 +147,7 @@ extern __declspec(selectany) int fsp_dt = 1; if (0 != fsp_top_level_irp) \ FspPropagateTopFlags(Irp, fsp_top_level_irp);\ IoSetTopLevelIrp(Irp); \ - if (!FspDeviceReference(IrpSp->DeviceObject))\ + if (!FspDeviceReference(DeviceObject))\ { \ Result = STATUS_CANCELLED; \ goto fsp_leave_label; \ @@ -175,10 +175,10 @@ extern __declspec(selectany) int fsp_dt = 1; FspFsvolDeviceExtension(DeviceObject);\ if (!FspIoqPostIrpEx(fsp_leave_FsvolDeviceExtension->Ioq, Irp,\ FSP_STATUS_IOQ_POST_BEST_EFFORT == Result, &Result))\ - {\ + { \ DEBUGLOG("FspIoqPostIrpEx = %s", NtStatusSym(Result));\ FspIopCompleteIrp(Irp, Result);\ - }\ + } \ } \ else \ FspIopCompleteIrpEx(Irp, Result, fsp_device_deref);\ @@ -721,6 +721,10 @@ NTSTATUS FspDeviceCopyList( VOID FspDeviceDeleteList( PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount); VOID FspDeviceDeleteAll(VOID); +#define FspFsvolDeviceStoppedStatus(DeviceObject)\ + STATUS_VOLUME_DISMOUNTED + //(FILE_DEVICE_DISK_FILE_SYSTEM == (DeviceObject)->DeviceType ?\ + // STATUS_VOLUME_DISMOUNTED : STATUS_DEVICE_NOT_CONNECTED) /* volume management */ NTSTATUS FspVolumeCreate( diff --git a/src/sys/write.c b/src/sys/write.c index 4251ab84..3fd1ca12 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -250,6 +250,10 @@ static NTSTATUS FspFsvolWriteNonCached( if (PagingIo && WriteToEndOfFile) return STATUS_INVALID_PARAMETER; + /* stop CcWriteBehind from calling me! */ + if (FspIoqStopped(FspFsvolDeviceExtension(FsvolDeviceObject)->Ioq)) + return FspFsvolDeviceStoppedStatus(FsvolDeviceObject); + /* probe and lock the user buffer */ if (0 == Irp->MdlAddress) {