mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-29 11:08:37 -05:00 
			
		
		
		
	sys: WIP
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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 }; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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]; | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user