This commit is contained in:
Bill Zissimopoulos 2015-11-29 15:31:25 -08:00
parent f35ecbe8ec
commit 97924ea65e
4 changed files with 11 additions and 9 deletions

View File

@ -94,8 +94,6 @@ NTSTATUS FspDeviceOwned(
static VOID FspFsctlDeviceDeleteObject(PDEVICE_OBJECT DeviceObject)
{
PAGED_CODE();
ExDeleteResourceLite(&FspFsctlDeviceExtension(DeviceObject)->Resource);
}
static VOID FspFsvrtDeviceDeleteObject(PDEVICE_OBJECT DeviceObject)
@ -133,6 +131,8 @@ VOID FspDeviceDeleteObject(PDEVICE_OBJECT DeviceObject)
break;
}
ExDeleteResourceLite(&FspDeviceExtension(DeviceObject)->Resource);
IoDeleteDevice(DeviceObject);
}

View File

@ -40,9 +40,9 @@ NTSTATUS DriverEntry(
if (!NT_SUCCESS(Result))
FSP_RETURN(IoDeleteDevice(FspFsctlDiskDeviceObject));
FspDeviceExtension(FspFsctlDiskDeviceObject)->Kind = FspFsctlDeviceExtensionKind;
ExInitializeResourceLite(&FspDeviceExtension(FspFsctlDiskDeviceObject)->Resource);
FspDeviceExtension(FspFsctlNetDeviceObject)->Kind = FspFsctlDeviceExtensionKind;
ExInitializeResourceLite(&FspFsctlDeviceExtension(FspFsctlDiskDeviceObject)->Resource);
ExInitializeResourceLite(&FspFsctlDeviceExtension(FspFsctlNetDeviceObject)->Resource);
ExInitializeResourceLite(&FspDeviceExtension(FspFsctlNetDeviceObject)->Resource);
/* setup the driver object */
DriverObject->DriverUnload = FspUnload;

View File

@ -245,11 +245,11 @@ enum
typedef struct
{
UINT8 Kind;
ERESOURCE Resource;
} FSP_DEVICE_EXTENSION;
typedef struct
{
FSP_DEVICE_EXTENSION Base;
ERESOURCE Resource;
} FSP_FSCTL_DEVICE_EXTENSION;
typedef struct
{

View File

@ -103,6 +103,7 @@ static NTSTATUS FspFsctlCreateVolume(
{
FSP_FSVRT_DEVICE_EXTENSION *FsvrtDeviceExtension = FspFsvrtDeviceExtension(FsvrtDeviceObject);
FsvrtDeviceExtension->Base.Kind = FspFsvrtDeviceExtensionKind;
ExInitializeResourceLite(&FsvrtDeviceExtension->Base.Resource);
FsvrtDeviceExtension->FsctlDeviceObject = DeviceObject;
FsvrtDeviceExtension->VolumeParams = *Params;
FspIoqInitialize(&FsvrtDeviceExtension->Ioq);
@ -148,7 +149,7 @@ static NTSTATUS FspFsctlMountVolume(
if (FILE_DEVICE_VIRTUAL_DISK != FsvrtDeviceObject->DeviceType)
return STATUS_UNRECOGNIZED_VOLUME;
ExAcquireResourceExclusiveLite(&FsctlDeviceExtension->Resource, TRUE);
ExAcquireResourceExclusiveLite(&FsctlDeviceExtension->Base.Resource, TRUE);
/* create the file system device object */
Result = IoCreateDevice(DeviceObject->DriverObject,
@ -162,13 +163,14 @@ static NTSTATUS FspFsctlMountVolume(
FspFsvrtDeviceExtension(FsvrtDeviceObject)->VolumeParams.SectorSize;
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
FsvolDeviceExtension->Base.Kind = FspFsvolDeviceExtensionKind;
ExInitializeResourceLite(&FsvolDeviceExtension->Base.Resource);
FsvolDeviceExtension->FsvrtDeviceObject = FsvrtDeviceObject;
ClearFlag(FsvolDeviceObject->Flags, DO_DEVICE_INITIALIZING);
Vpb->DeviceObject = FsvolDeviceObject;
Irp->IoStatus.Information = 0;
}
ExReleaseResourceLite(&FsctlDeviceExtension->Resource);
ExReleaseResourceLite(&FsctlDeviceExtension->Base.Resource);
return Result;
}
@ -190,7 +192,7 @@ static NTSTATUS FspFsvrtDeleteVolume(
if (!NT_SUCCESS(Result))
return Result;
ExAcquireResourceExclusiveLite(&FsctlDeviceExtension->Resource, TRUE);
ExAcquireResourceExclusiveLite(&FsctlDeviceExtension->Base.Resource, TRUE);
/* stop the I/O queue */
FspIoqStop(&FsvrtDeviceExtension->Ioq);
@ -223,7 +225,7 @@ static NTSTATUS FspFsvrtDeleteVolume(
/* delete the virtual volume device */
FspDeviceDeleteObject(DeviceObject);
ExReleaseResourceLite(&FsctlDeviceExtension->Resource);
ExReleaseResourceLite(&FsctlDeviceExtension->Base.Resource);
return STATUS_INVALID_DEVICE_REQUEST;
}