From 97c98ac265e6f2d2cadd755aada9d5f8664932d7 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 27 Nov 2015 23:37:57 -0800 Subject: [PATCH] sys: WIP --- build/VStudio/winfsp_sys.vcxproj | 2 +- build/VStudio/winfsp_sys.vcxproj.filters | 2 +- src/sys/cleanup.c | 2 +- src/sys/close.c | 2 +- src/sys/create.c | 2 +- src/sys/devctl.c | 2 +- src/sys/dirctl.c | 2 +- src/sys/driver.c | 38 ++++++++--------- src/sys/driver.h | 54 +++++++++++------------- src/sys/ea.c | 4 +- src/sys/fileinfo.c | 4 +- src/sys/flush.c | 2 +- src/sys/fsctl.c | 2 +- src/sys/{ioc.c => iop.c} | 10 ++--- src/sys/lockctl.c | 2 +- src/sys/read.c | 2 +- src/sys/security.c | 4 +- src/sys/shutdown.c | 2 +- src/sys/volinfo.c | 4 +- 19 files changed, 68 insertions(+), 74 deletions(-) rename src/sys/{ioc.c => iop.c} (79%) diff --git a/build/VStudio/winfsp_sys.vcxproj b/build/VStudio/winfsp_sys.vcxproj index 64a63e52..2b7e4d5f 100644 --- a/build/VStudio/winfsp_sys.vcxproj +++ b/build/VStudio/winfsp_sys.vcxproj @@ -146,7 +146,7 @@ - + diff --git a/build/VStudio/winfsp_sys.vcxproj.filters b/build/VStudio/winfsp_sys.vcxproj.filters index 6e8c242a..ce080be4 100644 --- a/build/VStudio/winfsp_sys.vcxproj.filters +++ b/build/VStudio/winfsp_sys.vcxproj.filters @@ -77,7 +77,7 @@ Source - + Source diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c index d3c07a1f..314a9d6d 100644 --- a/src/sys/cleanup.c +++ b/src/sys/cleanup.c @@ -13,7 +13,7 @@ static NTSTATUS FspFsvrtCleanup( static NTSTATUS FspFsvolCleanup( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspCleanup; -FSP_IOCOMPLETION_DISPATCH FspCleanupComplete; +FSP_IOPROC_DISPATCH FspCleanupComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsctlCleanup) diff --git a/src/sys/close.c b/src/sys/close.c index c1ab0452..30659b98 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -13,7 +13,7 @@ static NTSTATUS FspFsvrtClose( static NTSTATUS FspFsvolClose( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspClose; -FSP_IOCOMPLETION_DISPATCH FspCloseComplete; +FSP_IOPROC_DISPATCH FspCloseComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsctlClose) diff --git a/src/sys/create.c b/src/sys/create.c index d50ccb9c..a03f9997 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -13,7 +13,7 @@ static NTSTATUS FspFsvrtCreate( static NTSTATUS FspFsvolCreate( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspCreate; -FSP_IOCOMPLETION_DISPATCH FspCreateComplete; +FSP_IOPROC_DISPATCH FspCreateComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsctlCreate) diff --git a/src/sys/devctl.c b/src/sys/devctl.c index 9dabad4c..92caa427 100644 --- a/src/sys/devctl.c +++ b/src/sys/devctl.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolDeviceControl( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspDeviceControl; -FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete; +FSP_IOPROC_DISPATCH FspDeviceControlComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolDeviceControl) diff --git a/src/sys/dirctl.c b/src/sys/dirctl.c index f7a19a67..88c78178 100644 --- a/src/sys/dirctl.c +++ b/src/sys/dirctl.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolDirectoryControl( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspDirectoryControl; -FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete; +FSP_IOPROC_DISPATCH FspDirectoryControlComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolDirectoryControl) diff --git a/src/sys/driver.c b/src/sys/driver.c index a51cafd4..f21076b6 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -67,25 +67,25 @@ DriverEntry( DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity; /* setup the I/O completion functions */ - FspIoCompletionFunction[IRP_MJ_CREATE] = FspCreateComplete; - FspIoCompletionFunction[IRP_MJ_CLOSE] = FspCloseComplete; - FspIoCompletionFunction[IRP_MJ_READ] = FspReadComplete; - FspIoCompletionFunction[IRP_MJ_WRITE] = FspWriteComplete; - FspIoCompletionFunction[IRP_MJ_QUERY_INFORMATION] = FspQueryInformationComplete; - FspIoCompletionFunction[IRP_MJ_SET_INFORMATION] = FspSetInformationComplete; - FspIoCompletionFunction[IRP_MJ_QUERY_EA] = FspQueryEaComplete; - FspIoCompletionFunction[IRP_MJ_SET_EA] = FspSetEaComplete; - FspIoCompletionFunction[IRP_MJ_FLUSH_BUFFERS] = FspFlushBuffersComplete; - FspIoCompletionFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = FspQueryVolumeInformationComplete; - FspIoCompletionFunction[IRP_MJ_SET_VOLUME_INFORMATION] = FspSetVolumeInformationComplete; - FspIoCompletionFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControlComplete; - FspIoCompletionFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControlComplete; - FspIoCompletionFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControlComplete; - FspIoCompletionFunction[IRP_MJ_SHUTDOWN] = FspShutdownComplete; - FspIoCompletionFunction[IRP_MJ_LOCK_CONTROL] = FspLockControlComplete; - FspIoCompletionFunction[IRP_MJ_CLEANUP] = FspCleanupComplete; - FspIoCompletionFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurityComplete; - FspIoCompletionFunction[IRP_MJ_SET_SECURITY] = FspSetSecurityComplete; + FspIoProcessFunction[IRP_MJ_CREATE] = FspCreateComplete; + FspIoProcessFunction[IRP_MJ_CLOSE] = FspCloseComplete; + FspIoProcessFunction[IRP_MJ_READ] = FspReadComplete; + FspIoProcessFunction[IRP_MJ_WRITE] = FspWriteComplete; + FspIoProcessFunction[IRP_MJ_QUERY_INFORMATION] = FspQueryInformationComplete; + FspIoProcessFunction[IRP_MJ_SET_INFORMATION] = FspSetInformationComplete; + FspIoProcessFunction[IRP_MJ_QUERY_EA] = FspQueryEaComplete; + FspIoProcessFunction[IRP_MJ_SET_EA] = FspSetEaComplete; + FspIoProcessFunction[IRP_MJ_FLUSH_BUFFERS] = FspFlushBuffersComplete; + FspIoProcessFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = FspQueryVolumeInformationComplete; + FspIoProcessFunction[IRP_MJ_SET_VOLUME_INFORMATION] = FspSetVolumeInformationComplete; + FspIoProcessFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControlComplete; + FspIoProcessFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControlComplete; + FspIoProcessFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControlComplete; + FspIoProcessFunction[IRP_MJ_SHUTDOWN] = FspShutdownComplete; + FspIoProcessFunction[IRP_MJ_LOCK_CONTROL] = FspLockControlComplete; + FspIoProcessFunction[IRP_MJ_CLEANUP] = FspCleanupComplete; + FspIoProcessFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurityComplete; + FspIoProcessFunction[IRP_MJ_SET_SECURITY] = FspSetSecurityComplete; /* setup fast I/O and resource acquisition */ static FAST_IO_DISPATCH FspFastIoDispatch = { 0 }; diff --git a/src/sys/driver.h b/src/sys/driver.h index 9c7bb094..0058c95d 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -160,11 +160,8 @@ _Function_class_(DRIVER_DISPATCH) _IRQL_requires_max_(APC_LEVEL) /* see https://msdn.microsoft.com/en-us/library/windows/hardware/ff540124(v=vs.85).aspx */ _IRQL_requires_same_ -typedef -NTSTATUS -FSP_DRIVER_DISPATCH( - _In_ struct _DEVICE_OBJECT *DeviceObject, - _Inout_ struct _IRP *Irp); +typedef NTSTATUS FSP_DRIVER_DISPATCH( + _In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp); _Dispatch_type_(IRP_MJ_CLEANUP) FSP_DRIVER_DISPATCH FspCleanup; _Dispatch_type_(IRP_MJ_CLOSE) FSP_DRIVER_DISPATCH FspClose; _Dispatch_type_(IRP_MJ_CREATE) FSP_DRIVER_DISPATCH FspCreate; @@ -188,30 +185,27 @@ _Dispatch_type_(IRP_MJ_WRITE) FSP_DRIVER_DISPATCH FspWrite; /* I/O completion functions */ _IRQL_requires_max_(APC_LEVEL) _IRQL_requires_same_ -typedef -VOID -FSP_IOCOMPLETION_DISPATCH( - _Inout_ PIRP Irp, - _In_ FSP_FSCTL_TRANSACT_RSP *Response); -FSP_IOCOMPLETION_DISPATCH FspCleanupComplete; -FSP_IOCOMPLETION_DISPATCH FspCloseComplete; -FSP_IOCOMPLETION_DISPATCH FspCreateComplete; -FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete; -FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete; -FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete; -FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete; -FSP_IOCOMPLETION_DISPATCH FspLockControlComplete; -FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete; -FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete; -FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspReadComplete; -FSP_IOCOMPLETION_DISPATCH FspSetEaComplete; -FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete; -FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspShutdownComplete; -FSP_IOCOMPLETION_DISPATCH FspWriteComplete; +typedef VOID FSP_IOPROC_DISPATCH( + _Inout_ PIRP Irp, _In_ FSP_FSCTL_TRANSACT_RSP *Response); +FSP_IOPROC_DISPATCH FspCleanupComplete; +FSP_IOPROC_DISPATCH FspCloseComplete; +FSP_IOPROC_DISPATCH FspCreateComplete; +FSP_IOPROC_DISPATCH FspDeviceControlComplete; +FSP_IOPROC_DISPATCH FspDirectoryControlComplete; +FSP_IOPROC_DISPATCH FspFileSystemControlComplete; +FSP_IOPROC_DISPATCH FspFlushBuffersComplete; +FSP_IOPROC_DISPATCH FspLockControlComplete; +FSP_IOPROC_DISPATCH FspQueryEaComplete; +FSP_IOPROC_DISPATCH FspQueryInformationComplete; +FSP_IOPROC_DISPATCH FspQuerySecurityComplete; +FSP_IOPROC_DISPATCH FspQueryVolumeInformationComplete; +FSP_IOPROC_DISPATCH FspReadComplete; +FSP_IOPROC_DISPATCH FspSetEaComplete; +FSP_IOPROC_DISPATCH FspSetInformationComplete; +FSP_IOPROC_DISPATCH FspSetSecurityComplete; +FSP_IOPROC_DISPATCH FspSetVolumeInformationComplete; +FSP_IOPROC_DISPATCH FspShutdownComplete; +FSP_IOPROC_DISPATCH FspWriteComplete; /* fast I/O */ FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible; @@ -310,6 +304,6 @@ const char *IoctlCodeSym(ULONG ControlCode); /* extern */ extern PDEVICE_OBJECT FspFsctlDiskDeviceObject; extern PDEVICE_OBJECT FspFsctlNetDeviceObject; -extern FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[]; +extern FSP_IOPROC_DISPATCH *FspIoProcessFunction[]; #endif diff --git a/src/sys/ea.c b/src/sys/ea.c index 34e6add4..492dc15c 100644 --- a/src/sys/ea.c +++ b/src/sys/ea.c @@ -12,8 +12,8 @@ static NTSTATUS FspFsvolSetEa( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspQueryEa; FSP_DRIVER_DISPATCH FspSetEa; -FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete; -FSP_IOCOMPLETION_DISPATCH FspSetEaComplete; +FSP_IOPROC_DISPATCH FspQueryEaComplete; +FSP_IOPROC_DISPATCH FspSetEaComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolQueryEa) diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 1d1049f9..b6acff68 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -12,8 +12,8 @@ static NTSTATUS FspFsvolSetInformation( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspQueryInformation; FSP_DRIVER_DISPATCH FspSetInformation; -FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete; +FSP_IOPROC_DISPATCH FspQueryInformationComplete; +FSP_IOPROC_DISPATCH FspSetInformationComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolQueryInformation) diff --git a/src/sys/flush.c b/src/sys/flush.c index 5a04cb8f..44d0bd66 100644 --- a/src/sys/flush.c +++ b/src/sys/flush.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolFlushBuffers( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspFlushBuffers; -FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete; +FSP_IOPROC_DISPATCH FspFlushBuffersComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolFlushBuffers) diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index ccf24581..cf3baeb4 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -19,7 +19,7 @@ static NTSTATUS FspFsvrtFileSystemControl( static NTSTATUS FspFsvolFileSystemControl( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspFileSystemControl; -FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete; +FSP_IOPROC_DISPATCH FspFileSystemControlComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsctlCreateVolume) diff --git a/src/sys/ioc.c b/src/sys/iop.c similarity index 79% rename from src/sys/ioc.c rename to src/sys/iop.c index df8ce079..770540e0 100644 --- a/src/sys/ioc.c +++ b/src/sys/iop.c @@ -1,5 +1,5 @@ /** - * @file sys/ioc.c + * @file sys/iop.c * * @copyright 2015 Bill Zissimopoulos */ @@ -37,9 +37,9 @@ VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); ASSERT(IRP_MJ_MAXIMUM_FUNCTION >= IrpSp->MajorFunction); - ASSERT(0 != FspIoCompletionFunction[IrpSp->MajorFunction]); + ASSERT(0 != FspIoProcessFunction[IrpSp->MajorFunction]); - FspIoCompletionFunction[IrpSp->MajorFunction](Irp, Response); + FspIoProcessFunction[IrpSp->MajorFunction](Irp, Response); } - -FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; + +FSP_IOPROC_DISPATCH *FspIoProcessFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; diff --git a/src/sys/lockctl.c b/src/sys/lockctl.c index e8d39ea6..21be5613 100644 --- a/src/sys/lockctl.c +++ b/src/sys/lockctl.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolLockControl( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspLockControl; -FSP_IOCOMPLETION_DISPATCH FspLockControlComplete; +FSP_IOPROC_DISPATCH FspLockControlComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolLockControl) diff --git a/src/sys/read.c b/src/sys/read.c index 3608f620..5c99c0a3 100644 --- a/src/sys/read.c +++ b/src/sys/read.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolRead( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspRead; -FSP_IOCOMPLETION_DISPATCH FspReadComplete; +FSP_IOPROC_DISPATCH FspReadComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolRead) diff --git a/src/sys/security.c b/src/sys/security.c index 28fa2790..4789c077 100644 --- a/src/sys/security.c +++ b/src/sys/security.c @@ -12,8 +12,8 @@ static NTSTATUS FspFsvolSetSecurity( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspQuerySecurity; FSP_DRIVER_DISPATCH FspSetSecurity; -FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete; -FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete; +FSP_IOPROC_DISPATCH FspQuerySecurityComplete; +FSP_IOPROC_DISPATCH FspSetSecurityComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolQuerySecurity) diff --git a/src/sys/shutdown.c b/src/sys/shutdown.c index 690801f2..04dd97c7 100644 --- a/src/sys/shutdown.c +++ b/src/sys/shutdown.c @@ -9,7 +9,7 @@ static NTSTATUS FspFsvolShutdown( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspShutdown; -FSP_IOCOMPLETION_DISPATCH FspShutdownComplete; +FSP_IOPROC_DISPATCH FspShutdownComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolShutdown) diff --git a/src/sys/volinfo.c b/src/sys/volinfo.c index 9de33de1..13a4388b 100644 --- a/src/sys/volinfo.c +++ b/src/sys/volinfo.c @@ -12,8 +12,8 @@ static NTSTATUS FspFsvolSetVolumeInformation( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); FSP_DRIVER_DISPATCH FspQueryVolumeInformation; FSP_DRIVER_DISPATCH FspSetVolumeInformation; -FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete; -FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete; +FSP_IOPROC_DISPATCH FspQueryVolumeInformationComplete; +FSP_IOPROC_DISPATCH FspSetVolumeInformationComplete; #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFsvolQueryVolumeInformation)