From 7bd979a3fdf0068ffa53a6e9283e15b58bdcd1ce Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 29 Nov 2015 15:40:34 -0800 Subject: [PATCH] sys: WIP --- src/sys/device.c | 12 ++++++++++++ src/sys/driver.c | 6 ++---- src/sys/driver.h | 1 + src/sys/fsctl.c | 6 ++---- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/sys/device.c b/src/sys/device.c index 932f23bb..faedd7b6 100644 --- a/src/sys/device.c +++ b/src/sys/device.c @@ -12,6 +12,7 @@ VOID FspDeviceDeleteList( PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount); NTSTATUS FspDeviceOwned( PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT DeviceObject); +VOID FspDeviceInitExtension(PDEVICE_OBJECT DeviceObject, UINT8 Kind); static VOID FspFsctlDeviceDeleteObject(PDEVICE_OBJECT DeviceObject); static VOID FspFsvrtDeviceDeleteObject(PDEVICE_OBJECT DeviceObject); static VOID FspFsvolDeviceDeleteObject(PDEVICE_OBJECT DeviceObject); @@ -22,6 +23,7 @@ VOID FspDeviceDeleteObjects(PDRIVER_OBJECT DriverObject); #pragma alloc_text(PAGE, FspDeviceCreateList) #pragma alloc_text(PAGE, FspDeviceDeleteList) #pragma alloc_text(PAGE, FspDeviceOwned) +#pragma alloc_text(PAGE, FspDeviceInitExtension) #pragma alloc_text(PAGE, FspFsctlDeviceDeleteObject) #pragma alloc_text(PAGE, FspFsvrtDeviceDeleteObject) #pragma alloc_text(PAGE, FspFsvolDeviceDeleteObject) @@ -91,6 +93,16 @@ NTSTATUS FspDeviceOwned( return Result; } +VOID FspDeviceInitExtension(PDEVICE_OBJECT DeviceObject, UINT8 Kind) +{ + PAGED_CODE(); + + FSP_DEVICE_EXTENSION *DeviceExtension = FspDeviceExtension(DeviceObject); + + DeviceExtension->Kind = Kind; + ExInitializeResourceLite(&DeviceExtension->Resource); +} + static VOID FspFsctlDeviceDeleteObject(PDEVICE_OBJECT DeviceObject) { PAGED_CODE(); diff --git a/src/sys/driver.c b/src/sys/driver.c index b404c83e..0c722c3d 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -39,10 +39,8 @@ NTSTATUS DriverEntry( &FspFsctlNetDeviceObject); if (!NT_SUCCESS(Result)) FSP_RETURN(IoDeleteDevice(FspFsctlDiskDeviceObject)); - FspDeviceExtension(FspFsctlDiskDeviceObject)->Kind = FspFsctlDeviceExtensionKind; - ExInitializeResourceLite(&FspDeviceExtension(FspFsctlDiskDeviceObject)->Resource); - FspDeviceExtension(FspFsctlNetDeviceObject)->Kind = FspFsctlDeviceExtensionKind; - ExInitializeResourceLite(&FspDeviceExtension(FspFsctlNetDeviceObject)->Resource); + FspDeviceInitExtension(FspFsctlDiskDeviceObject, FspFsctlDeviceExtensionKind); + FspDeviceInitExtension(FspFsctlNetDeviceObject, FspFsctlDeviceExtensionKind); /* setup the driver object */ DriverObject->DriverUnload = FspUnload; diff --git a/src/sys/driver.h b/src/sys/driver.h index 9c275aa3..da75c46e 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -294,6 +294,7 @@ VOID FspDeviceDeleteList( PDEVICE_OBJECT *DeviceObjects, ULONG DeviceObjectCount); NTSTATUS FspDeviceOwned( PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT DeviceObject); +VOID FspDeviceInitExtension(PDEVICE_OBJECT DeviceObject, UINT8 Kind); VOID FspDeviceDeleteObject(PDEVICE_OBJECT DeviceObject); VOID FspDeviceDeleteObjects(PDRIVER_OBJECT DriverObject); diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index fc92f139..08a4bd2a 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -101,9 +101,8 @@ static NTSTATUS FspFsctlCreateVolume( &FsvrtDeviceObject); if (NT_SUCCESS(Result)) { + FspDeviceInitExtension(FsvrtDeviceObject, FspFsvrtDeviceExtensionKind); FSP_FSVRT_DEVICE_EXTENSION *FsvrtDeviceExtension = FspFsvrtDeviceExtension(FsvrtDeviceObject); - FsvrtDeviceExtension->Base.Kind = FspFsvrtDeviceExtensionKind; - ExInitializeResourceLite(&FsvrtDeviceExtension->Base.Resource); FsvrtDeviceExtension->FsctlDeviceObject = DeviceObject; FsvrtDeviceExtension->VolumeParams = *Params; FspIoqInitialize(&FsvrtDeviceExtension->Ioq); @@ -161,9 +160,8 @@ static NTSTATUS FspFsctlMountVolume( #pragma prefast(suppress:28175, "We are a filesystem: ok to access SectorSize") FsvolDeviceObject->SectorSize = FspFsvrtDeviceExtension(FsvrtDeviceObject)->VolumeParams.SectorSize; + FspDeviceInitExtension(FsvolDeviceObject, FspFsvolDeviceExtensionKind); 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;