diff --git a/src/sys/close.c b/src/sys/close.c index 7e146536..b92d6e42 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -43,6 +43,9 @@ static NTSTATUS FspFsctlClose( { PAGED_CODE(); + if (0 != IrpSp->FileObject->FsContext2) + FspDeviceDereference(IrpSp->FileObject->FsContext2); + Irp->IoStatus.Information = 0; return STATUS_SUCCESS; } diff --git a/src/sys/create.c b/src/sys/create.c index 03e47806..34303256 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -116,7 +116,11 @@ static NTSTATUS FspFsctlCreate( if (0 == FileObject->RelatedFileObject && PREFIXW_SIZE <= FileObject->FileName.Length && RtlEqualMemory(PREFIXW, FileObject->FileName.Buffer, PREFIXW_SIZE)) + { Result = FspVolumeCreate(DeviceObject, Irp, IrpSp); + if (NT_SUCCESS(Result) && 0 != IrpSp->FileObject->FsContext2) + FspDeviceReference(IrpSp->FileObject->FsContext2); + } else { Result = STATUS_SUCCESS; diff --git a/src/sys/volume.c b/src/sys/volume.c index 7cd87654..6928d065 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -417,7 +417,6 @@ static VOID FspVolumeDeleteNoLock( PDEVICE_OBJECT FsvolDeviceObject = IrpSp->FileObject->FsContext2; FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); - IrpSp->FileObject->FsContext2 = 0; /* stop the I/O queue */ FspIoqStop(FsvolDeviceExtension->Ioq, TRUE);