sys: FspFsvolDeviceStoppedStatus

This commit is contained in:
Bill Zissimopoulos 2016-03-10 00:23:43 -08:00
parent 3dc2d9099d
commit 3f98d1cb01
2 changed files with 11 additions and 3 deletions

View File

@ -147,7 +147,7 @@ extern __declspec(selectany) int fsp_dt = 1;
if (0 != fsp_top_level_irp) \ if (0 != fsp_top_level_irp) \
FspPropagateTopFlags(Irp, fsp_top_level_irp);\ FspPropagateTopFlags(Irp, fsp_top_level_irp);\
IoSetTopLevelIrp(Irp); \ IoSetTopLevelIrp(Irp); \
if (!FspDeviceReference(IrpSp->DeviceObject))\ if (!FspDeviceReference(DeviceObject))\
{ \ { \
Result = STATUS_CANCELLED; \ Result = STATUS_CANCELLED; \
goto fsp_leave_label; \ goto fsp_leave_label; \
@ -175,10 +175,10 @@ extern __declspec(selectany) int fsp_dt = 1;
FspFsvolDeviceExtension(DeviceObject);\ FspFsvolDeviceExtension(DeviceObject);\
if (!FspIoqPostIrpEx(fsp_leave_FsvolDeviceExtension->Ioq, Irp,\ if (!FspIoqPostIrpEx(fsp_leave_FsvolDeviceExtension->Ioq, Irp,\
FSP_STATUS_IOQ_POST_BEST_EFFORT == Result, &Result))\ FSP_STATUS_IOQ_POST_BEST_EFFORT == Result, &Result))\
{\ { \
DEBUGLOG("FspIoqPostIrpEx = %s", NtStatusSym(Result));\ DEBUGLOG("FspIoqPostIrpEx = %s", NtStatusSym(Result));\
FspIopCompleteIrp(Irp, Result);\ FspIopCompleteIrp(Irp, Result);\
}\ } \
} \ } \
else \ else \
FspIopCompleteIrpEx(Irp, Result, fsp_device_deref);\ FspIopCompleteIrpEx(Irp, Result, fsp_device_deref);\
@ -721,6 +721,10 @@ NTSTATUS FspDeviceCopyList(
VOID FspDeviceDeleteList( VOID FspDeviceDeleteList(
PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount); PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount);
VOID FspDeviceDeleteAll(VOID); 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 */ /* volume management */
NTSTATUS FspVolumeCreate( NTSTATUS FspVolumeCreate(

View File

@ -250,6 +250,10 @@ static NTSTATUS FspFsvolWriteNonCached(
if (PagingIo && WriteToEndOfFile) if (PagingIo && WriteToEndOfFile)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
/* stop CcWriteBehind from calling me! */
if (FspIoqStopped(FspFsvolDeviceExtension(FsvolDeviceObject)->Ioq))
return FspFsvolDeviceStoppedStatus(FsvolDeviceObject);
/* probe and lock the user buffer */ /* probe and lock the user buffer */
if (0 == Irp->MdlAddress) if (0 == Irp->MdlAddress)
{ {