From 97924ea65e630e7380cefc003603cde6e1a8ac52 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 29 Nov 2015 15:31:25 -0800 Subject: [PATCH] sys: WIP --- src/sys/device.c | 4 ++-- src/sys/driver.c | 4 ++-- src/sys/driver.h | 2 +- src/sys/fsctl.c | 10 ++++++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/sys/device.c b/src/sys/device.c index 2d24f0f8..932f23bb 100644 --- a/src/sys/device.c +++ b/src/sys/device.c @@ -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); } diff --git a/src/sys/driver.c b/src/sys/driver.c index 5280a507..b404c83e 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -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; diff --git a/src/sys/driver.h b/src/sys/driver.h index b8d2a6a9..9c275aa3 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -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 { diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 91089716..fc92f139 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -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; }