mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-29 11:08:37 -05:00 
			
		
		
		
	sys: I/O completion functions
This commit is contained in:
		| @@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtCleanup( | ||||
| static NTSTATUS FspFsvolCleanup( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspCleanup; | ||||
| FSP_IOCOMPLETION_DISPATCH FspCleanupComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsctlCleanup) | ||||
| #pragma alloc_text(PAGE, FspFsvrtCleanup) | ||||
| #pragma alloc_text(PAGE, FspFsvolCleanup) | ||||
| #pragma alloc_text(PAGE, FspCleanup) | ||||
| #pragma alloc_text(PAGE, FspCleanupComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsctlCleanup( | ||||
| @@ -66,3 +68,10 @@ FspCleanup( | ||||
|  | ||||
|     FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject); | ||||
| } | ||||
|  | ||||
| VOID FspCleanupComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtClose( | ||||
| static NTSTATUS FspFsvolClose( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspClose; | ||||
| FSP_IOCOMPLETION_DISPATCH FspCloseComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsctlClose) | ||||
| #pragma alloc_text(PAGE, FspFsvrtClose) | ||||
| #pragma alloc_text(PAGE, FspFsvolClose) | ||||
| #pragma alloc_text(PAGE, FspClose) | ||||
| #pragma alloc_text(PAGE, FspCloseComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsctlClose( | ||||
| @@ -66,3 +68,10 @@ FspClose( | ||||
|  | ||||
|     FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject); | ||||
| } | ||||
|  | ||||
| VOID FspCloseComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtCreate( | ||||
| static NTSTATUS FspFsvolCreate( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspCreate; | ||||
| FSP_IOCOMPLETION_DISPATCH FspCreateComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsctlCreate) | ||||
| #pragma alloc_text(PAGE, FspFsvrtCreate) | ||||
| #pragma alloc_text(PAGE, FspFsvolCreate) | ||||
| #pragma alloc_text(PAGE, FspCreate) | ||||
| #pragma alloc_text(PAGE, FspCreateComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsctlCreate( | ||||
| @@ -80,3 +82,10 @@ FspCreate( | ||||
|         Irp->Overlay.AllocationSize.HighPart, Irp->Overlay.AllocationSize.LowPart, | ||||
|         Irp->AssociatedIrp.SystemBuffer, IrpSp->Parameters.Create.EaLength); | ||||
| } | ||||
|  | ||||
| VOID FspCreateComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolDeviceControl( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspDeviceControl; | ||||
| FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolDeviceControl) | ||||
| #pragma alloc_text(PAGE, FspDeviceControl) | ||||
| #pragma alloc_text(PAGE, FspDeviceControlComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolDeviceControl( | ||||
| @@ -40,3 +42,10 @@ FspDeviceControl( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspDeviceControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolDirectoryControl( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspDirectoryControl; | ||||
| FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolDirectoryControl) | ||||
| #pragma alloc_text(PAGE, FspDirectoryControl) | ||||
| #pragma alloc_text(PAGE, FspDirectoryControlComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolDirectoryControl( | ||||
| @@ -40,3 +42,10 @@ FspDirectoryControl( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspDirectoryControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -47,7 +47,6 @@ DriverEntry( | ||||
|     /* setup the driver object */ | ||||
|     DriverObject->DriverUnload = FspUnload; | ||||
|     DriverObject->MajorFunction[IRP_MJ_CREATE] = FspCreate; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = IopInvalidDeviceRequest; | ||||
|     DriverObject->MajorFunction[IRP_MJ_CLOSE] = FspClose; | ||||
|     DriverObject->MajorFunction[IRP_MJ_READ] = FspRead; | ||||
|     DriverObject->MajorFunction[IRP_MJ_WRITE] = FspWrite; | ||||
| @@ -61,19 +60,32 @@ DriverEntry( | ||||
|     DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControl; | ||||
|     DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControl; | ||||
|     DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControl; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = IopInvalidDeviceRequest; | ||||
|     DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = FspShutdown; | ||||
|     DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = FspLockControl; | ||||
|     DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FspCleanup; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_CREATE_MAILSLOT] = IopInvalidDeviceRequest; | ||||
|     DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurity; | ||||
|     DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_POWER] = IopInvalidDeviceRequest; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = IopInvalidDeviceRequest; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_DEVICE_CHANGE] = IopInvalidDeviceRequest; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = IopInvalidDeviceRequest; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = IopInvalidDeviceRequest; | ||||
|     //DriverObject->MajorFunction[IRP_MJ_PNP] = IopInvalidDeviceRequest; | ||||
|  | ||||
|     /* 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; | ||||
|  | ||||
|     /* setup fast I/O and resource acquisition */ | ||||
|     static FAST_IO_DISPATCH FspFastIoDispatch = { 0 }; | ||||
|   | ||||
| @@ -145,6 +145,28 @@ DRIVER_DISPATCH FspSetVolumeInformation; | ||||
| DRIVER_DISPATCH FspShutdown; | ||||
| DRIVER_DISPATCH FspWrite; | ||||
|  | ||||
| /* I/O completion functions */ | ||||
| typedef VOID FSP_IOCOMPLETION_DISPATCH(PIRP Irp, 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; | ||||
|  | ||||
| /* fast I/O */ | ||||
| FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible; | ||||
|  | ||||
| @@ -242,5 +264,6 @@ const char *IoctlCodeSym(ULONG ControlCode); | ||||
| /* extern */ | ||||
| extern PDEVICE_OBJECT FspFsctlDiskDeviceObject; | ||||
| extern PDEVICE_OBJECT FspFsctlNetDeviceObject; | ||||
| extern FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[]; | ||||
|  | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										18
									
								
								src/sys/ea.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								src/sys/ea.c
									
									
									
									
									
								
							| @@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetEa( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspQueryEa; | ||||
| DRIVER_DISPATCH FspSetEa; | ||||
| FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete; | ||||
| FSP_IOCOMPLETION_DISPATCH FspSetEaComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolQueryEa) | ||||
| #pragma alloc_text(PAGE, FspFsvolSetEa) | ||||
| #pragma alloc_text(PAGE, FspQueryEa) | ||||
| #pragma alloc_text(PAGE, FspSetEa) | ||||
| #pragma alloc_text(PAGE, FspQueryEaComplete) | ||||
| #pragma alloc_text(PAGE, FspSetEaComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolQueryEa( | ||||
| @@ -71,3 +75,17 @@ FspSetEa( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspQueryEaComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|  | ||||
| VOID FspSetEaComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetInformation( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspQueryInformation; | ||||
| DRIVER_DISPATCH FspSetInformation; | ||||
| FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete; | ||||
| FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolQueryInformation) | ||||
| #pragma alloc_text(PAGE, FspFsvolSetInformation) | ||||
| #pragma alloc_text(PAGE, FspQueryInformation) | ||||
| #pragma alloc_text(PAGE, FspSetInformation) | ||||
| #pragma alloc_text(PAGE, FspQueryInformationComplete) | ||||
| #pragma alloc_text(PAGE, FspSetInformationComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolQueryInformation( | ||||
| @@ -71,3 +75,17 @@ FspSetInformation( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspQueryInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|  | ||||
| VOID FspSetInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolFlushBuffers( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspFlushBuffers; | ||||
| FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolFlushBuffers) | ||||
| #pragma alloc_text(PAGE, FspFlushBuffers) | ||||
| #pragma alloc_text(PAGE, FspFlushBuffersComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolFlushBuffers( | ||||
| @@ -40,3 +42,10 @@ FspFlushBuffers( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspFlushBuffersComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -19,6 +19,7 @@ static NTSTATUS FspFsvrtFileSystemControl( | ||||
| static NTSTATUS FspFsvolFileSystemControl( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspFileSystemControl; | ||||
| FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsctlCreateVolume) | ||||
| @@ -28,6 +29,7 @@ DRIVER_DISPATCH FspFileSystemControl; | ||||
| #pragma alloc_text(PAGE, FspFsvrtFileSystemControl) | ||||
| #pragma alloc_text(PAGE, FspFsvolFileSystemControl) | ||||
| #pragma alloc_text(PAGE, FspFileSystemControl) | ||||
| #pragma alloc_text(PAGE, FspFileSystemControlComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsctlCreateVolume( | ||||
| @@ -282,3 +284,10 @@ FspFileSystemControl( | ||||
|         IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction ? | ||||
|             IoctlCodeSym(IrpSp->Parameters.FileSystemControl.FsControlCode) : ""); | ||||
| } | ||||
|  | ||||
| VOID FspFileSystemControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -6,7 +6,10 @@ | ||||
|  | ||||
| #include <sys/driver.h> | ||||
|  | ||||
| VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response); | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspDispatchProcessedIrp) | ||||
| #endif | ||||
|  | ||||
| VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result) | ||||
| @@ -26,4 +29,14 @@ VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result) | ||||
|  | ||||
| VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); | ||||
|  | ||||
|     ASSERT(IRP_MJ_MAXIMUM_FUNCTION >= IrpSp->MajorFunction); | ||||
|     ASSERT(0 != FspIoCompletionFunction[IrpSp->MajorFunction]); | ||||
|  | ||||
|     FspIoCompletionFunction[IrpSp->MajorFunction](Irp, Response); | ||||
| } | ||||
|  | ||||
| FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolLockControl( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspLockControl; | ||||
| FSP_IOCOMPLETION_DISPATCH FspLockControlComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolLockControl) | ||||
| #pragma alloc_text(PAGE, FspLockControl) | ||||
| #pragma alloc_text(PAGE, FspLockControlComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolLockControl( | ||||
| @@ -40,3 +42,10 @@ FspLockControl( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspLockControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolRead( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspRead; | ||||
| FSP_IOCOMPLETION_DISPATCH FspReadComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolRead) | ||||
| #pragma alloc_text(PAGE, FspRead) | ||||
| #pragma alloc_text(PAGE, FspReadComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolRead( | ||||
| @@ -40,3 +42,10 @@ FspRead( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspReadComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetSecurity( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspQuerySecurity; | ||||
| DRIVER_DISPATCH FspSetSecurity; | ||||
| FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete; | ||||
| FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolQuerySecurity) | ||||
| #pragma alloc_text(PAGE, FspFsvolSetSecurity) | ||||
| #pragma alloc_text(PAGE, FspQuerySecurity) | ||||
| #pragma alloc_text(PAGE, FspSetSecurity) | ||||
| #pragma alloc_text(PAGE, FspQuerySecurityComplete) | ||||
| #pragma alloc_text(PAGE, FspSetSecurityComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolQuerySecurity( | ||||
| @@ -71,3 +75,17 @@ FspSetSecurity( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspQuerySecurityComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|  | ||||
| VOID FspSetSecurityComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolShutdown( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspShutdown; | ||||
| FSP_IOCOMPLETION_DISPATCH FspShutdownComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolShutdown) | ||||
| #pragma alloc_text(PAGE, FspShutdown) | ||||
| #pragma alloc_text(PAGE, FspShutdownComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolShutdown( | ||||
| @@ -40,3 +42,10 @@ FspShutdown( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspShutdownComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetVolumeInformation( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspQueryVolumeInformation; | ||||
| DRIVER_DISPATCH FspSetVolumeInformation; | ||||
| FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete; | ||||
| FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete; | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolQueryVolumeInformation) | ||||
| #pragma alloc_text(PAGE, FspFsvolSetVolumeInformation) | ||||
| #pragma alloc_text(PAGE, FspQueryVolumeInformation) | ||||
| #pragma alloc_text(PAGE, FspSetVolumeInformation) | ||||
| #pragma alloc_text(PAGE, FspQueryVolumeInformationComplete) | ||||
| #pragma alloc_text(PAGE, FspSetVolumeInformationComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolQueryVolumeInformation( | ||||
| @@ -71,3 +75,17 @@ FspSetVolumeInformation( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspQueryVolumeInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|  | ||||
| VOID FspSetVolumeInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
| @@ -9,10 +9,12 @@ | ||||
| static NTSTATUS FspFsvolWrite( | ||||
|     PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); | ||||
| DRIVER_DISPATCH FspWrite; | ||||
| VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response); | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspFsvolWrite) | ||||
| #pragma alloc_text(PAGE, FspWrite) | ||||
| #pragma alloc_text(PAGE, FspWriteComplete) | ||||
| #endif | ||||
|  | ||||
| static NTSTATUS FspFsvolWrite( | ||||
| @@ -40,3 +42,10 @@ FspWrite( | ||||
|  | ||||
|     FSP_LEAVE_MJ("", 0); | ||||
| } | ||||
|  | ||||
| VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     FspCompleteRequest(Irp, STATUS_SUCCESS); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user