sys: Reference the virtual volume device so that it will not go away while the file system device object is alive

This commit is contained in:
Bill Zissimopoulos 2015-12-04 09:41:48 -08:00
parent b72adb6c97
commit f7d6c26d4b
2 changed files with 14 additions and 0 deletions

View File

@ -204,6 +204,14 @@ static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject)
static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject) static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject)
{ {
PAGED_CODE(); PAGED_CODE();
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
/*
* Dereference the virtual volume device so that it can now go away.
*/
if (0 != FsvolDeviceExtension->FsvrtDeviceObject)
ObDereferenceObject(FsvolDeviceExtension->FsvrtDeviceObject);
} }
BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject) BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject)

View File

@ -230,6 +230,12 @@ static NTSTATUS FspFsctlMountVolume(
&FsvolDeviceObject); &FsvolDeviceObject);
if (NT_SUCCESS(Result)) if (NT_SUCCESS(Result))
{ {
/*
* Reference the virtual volume device so that it will not go away while the
* file system device object is alive!
*/
ObReferenceObject(FsvrtDeviceObject);
#pragma prefast(suppress:28175, "We are a filesystem: ok to access SectorSize") #pragma prefast(suppress:28175, "We are a filesystem: ok to access SectorSize")
FsvolDeviceObject->SectorSize = FsvrtDeviceExtension->VolumeParams.SectorSize; FsvolDeviceObject->SectorSize = FsvrtDeviceExtension->VolumeParams.SectorSize;
FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);