mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: FSP_IOCMPL_DISPATCH now returns NTSTATUS
This commit is contained in:
		| @@ -82,7 +82,7 @@ static NTSTATUS FspFsvolCleanup( | ||||
|      */ | ||||
| } | ||||
|  | ||||
| VOID FspFsvolCleanupComplete( | ||||
| NTSTATUS FspFsvolCleanupComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -84,7 +84,7 @@ static NTSTATUS FspFsvolClose( | ||||
|     return STATUS_SUCCESS; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolCloseComplete( | ||||
| NTSTATUS FspFsvolCloseComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -15,9 +15,9 @@ static NTSTATUS FspFsvolCreate( | ||||
| FSP_IOPREP_DISPATCH FspFsvolCreatePrepare; | ||||
| FSP_IOCMPL_DISPATCH FspFsvolCreateComplete; | ||||
| FSP_IORETR_DISPATCH FspFsvolCreateRetryComplete; | ||||
| static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request, | ||||
| static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, | ||||
|     FSP_FILE_NODE *FileNode, FSP_FILE_DESC *FileDesc, PFILE_OBJECT FileObject, | ||||
|     BOOLEAN FlushImage); | ||||
|     BOOLEAN FlushImage, BOOLEAN Retrying); | ||||
| static VOID FspFsvolCreatePostClose(FSP_FILE_DESC *FileDesc); | ||||
| static FSP_IOP_REQUEST_FINI FspFsvolCreateRequestFini; | ||||
| static FSP_IOP_REQUEST_FINI FspFsvolCreateTryOpenRequestFini; | ||||
| @@ -442,7 +442,7 @@ NTSTATUS FspFsvolCreatePrepare( | ||||
|     } | ||||
| } | ||||
|  | ||||
| VOID FspFsvolCreateComplete( | ||||
| NTSTATUS FspFsvolCreateComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
| @@ -580,7 +580,7 @@ VOID FspFsvolCreateComplete( | ||||
|                 (FlagOn(Response->Rsp.Create.Opened.GrantedAccess, FILE_WRITE_DATA) || | ||||
|                 DeleteOnClose); | ||||
|  | ||||
|             Result = FspFsvolCreateTryOpen(Irp, 0, FileNode, FileDesc, FileObject, FlushImage); | ||||
|             Result = FspFsvolCreateTryOpen(Irp, FileNode, FileDesc, FileObject, FlushImage, FALSE); | ||||
|         } | ||||
|         else | ||||
|         if (FILE_SUPERSEDED == Response->IoStatus.Information || | ||||
| @@ -693,7 +693,7 @@ NTSTATUS FspFsvolCreateRetryComplete( | ||||
|     FileObject = FspIopRequestContext(Request, RequestFileObject); | ||||
|     FlushImage = 0 != FspIopRequestContext(Request, RequestState); | ||||
|  | ||||
|     Result = FspFsvolCreateTryOpen(Irp, Request, FileNode, FileDesc, FileObject, FlushImage); | ||||
|     Result = FspFsvolCreateTryOpen(Irp, FileNode, FileDesc, FileObject, FlushImage, TRUE); | ||||
|     if (STATUS_PENDING == Result) | ||||
|         return Result; | ||||
|     else | ||||
| @@ -705,16 +705,17 @@ NTSTATUS FspFsvolCreateRetryComplete( | ||||
|     } | ||||
| } | ||||
|  | ||||
| static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request, | ||||
| static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, | ||||
|     FSP_FILE_NODE *FileNode, FSP_FILE_DESC *FileDesc, PFILE_OBJECT FileObject, | ||||
|     BOOLEAN FlushImage) | ||||
|     BOOLEAN FlushImage, BOOLEAN Retrying) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
|     ASSERT(0 == Request || FspFsctlTransactCreateKind == Request->Kind); | ||||
|  | ||||
|     FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); | ||||
|     BOOLEAN Success; | ||||
|  | ||||
|     ASSERT(FspFsctlTransactCreateKind == Request->Kind); | ||||
|  | ||||
|     Success = FspFileNodeTryAcquireExclusive(FileNode, Both); | ||||
|     if (!Success) | ||||
|     { | ||||
| @@ -724,7 +725,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request, | ||||
|         FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = | ||||
|             FspFsvolDeviceExtension(IrpSp->DeviceObject); | ||||
|  | ||||
|         if (0 == Request) | ||||
|         if (!Retrying) | ||||
|         { | ||||
|             /* disassociate the FileDesc momentarily from the Request */ | ||||
|             Request = FspIrpRequest(Irp); | ||||
|   | ||||
| @@ -33,7 +33,7 @@ static NTSTATUS FspFsvolDeviceControl( | ||||
|     return Result; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolDeviceControlComplete( | ||||
| NTSTATUS FspFsvolDeviceControlComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolDirectoryControl( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolDirectoryControlComplete( | ||||
| NTSTATUS FspFsvolDirectoryControlComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -172,7 +172,8 @@ extern __declspec(selectany) int fsp_bp = 1; | ||||
|                 (LONGLONG)Irp->IoStatus.Information);\ | ||||
|             FspIopCompleteIrp(Irp, Result);\ | ||||
|         }                               \ | ||||
|     ) | ||||
|     );                                  \ | ||||
|     return Result | ||||
| #define FSP_ENTER_BOOL(...)             \ | ||||
|     BOOLEAN Result = TRUE; FSP_ENTER_(__VA_ARGS__) | ||||
| #define FSP_LEAVE_BOOL(fmt, ...)        \ | ||||
| @@ -222,7 +223,7 @@ typedef NTSTATUS FSP_IOPREP_DISPATCH( | ||||
|     _Inout_ PIRP Irp, _Inout_ FSP_FSCTL_TRANSACT_REQ *Request); | ||||
| _IRQL_requires_max_(APC_LEVEL) | ||||
| _IRQL_requires_same_ | ||||
| typedef VOID FSP_IOCMPL_DISPATCH( | ||||
| typedef NTSTATUS FSP_IOCMPL_DISPATCH( | ||||
|     _Inout_ PIRP Irp, _In_ const FSP_FSCTL_TRANSACT_RSP *Response); | ||||
| _IRQL_requires_max_(APC_LEVEL) | ||||
| _IRQL_requires_same_ | ||||
| @@ -422,7 +423,7 @@ NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject, | ||||
| VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference); | ||||
| VOID FspIopCompleteCanceledIrp(PIRP Irp); | ||||
| NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request); | ||||
| VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); | ||||
| NTSTATUS FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); | ||||
| NTSTATUS FspIopDispatchRetryComplete(PIRP Irp); | ||||
|  | ||||
| /* device management */ | ||||
|   | ||||
| @@ -32,7 +32,7 @@ static NTSTATUS FspFsvolQueryEa( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolQueryEaComplete( | ||||
| NTSTATUS FspFsvolQueryEaComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
| @@ -48,7 +48,7 @@ static NTSTATUS FspFsvolSetEa( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolSetEaComplete( | ||||
| NTSTATUS FspFsvolSetEaComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -516,7 +516,7 @@ static NTSTATUS FspFsvolQueryInformation( | ||||
|     return Result; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolQueryInformationComplete( | ||||
| NTSTATUS FspFsvolQueryInformationComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
| @@ -731,7 +731,7 @@ static NTSTATUS FspFsvolSetInformation( | ||||
|     return Result; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolSetInformationComplete( | ||||
| NTSTATUS FspFsvolSetInformationComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolFlushBuffers( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolFlushBuffersComplete( | ||||
| NTSTATUS FspFsvolFlushBuffersComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -71,7 +71,7 @@ static NTSTATUS FspFsvolFileSystemControl( | ||||
|     return Result; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolFileSystemControlComplete( | ||||
| NTSTATUS FspFsvolFileSystemControlComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -19,7 +19,7 @@ static IO_COMPLETION_ROUTINE FspIopPostWorkRequestCompletion; | ||||
| VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference); | ||||
| VOID FspIopCompleteCanceledIrp(PIRP Irp); | ||||
| NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request); | ||||
| VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); | ||||
| NTSTATUS FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); | ||||
| NTSTATUS FspIopDispatchRetryComplete(PIRP Irp); | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| @@ -273,7 +273,7 @@ NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request) | ||||
|         return STATUS_SUCCESS; | ||||
| } | ||||
|  | ||||
| VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| NTSTATUS FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     PAGED_CODE(); | ||||
|  | ||||
| @@ -282,7 +282,7 @@ VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
|     ASSERT(IRP_MJ_MAXIMUM_FUNCTION >= IrpSp->MajorFunction); | ||||
|     ASSERT(0 != FspIopCompleteFunction[IrpSp->MajorFunction]); | ||||
|  | ||||
|     FspIopCompleteFunction[IrpSp->MajorFunction](Irp, Response); | ||||
|     return FspIopCompleteFunction[IrpSp->MajorFunction](Irp, Response); | ||||
| } | ||||
|  | ||||
| NTSTATUS FspIopDispatchRetryComplete(PIRP Irp) | ||||
|   | ||||
| @@ -59,7 +59,7 @@ | ||||
|  * FSP_IOQ_PROCESS_NO_CANCEL | ||||
|  * | ||||
|  * Define this macro to disallow cancelation (other than the FSP_IOQ being stopped) | ||||
|  * after an IRP has enter the Processing phase. | ||||
|  * after an IRP has entered the Processing phase. | ||||
|  * | ||||
|  * Once a file-system operation has been started its effects cannot be ignored. Even | ||||
|  * if the process that originated the operation decides to cancel it, we must correctly | ||||
| @@ -329,11 +329,7 @@ static PIRP FspIoqRetriedPeekNextIrp(PIO_CSQ IoCsq, PIRP Irp, PVOID PeekContext) | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         if (Irp == IrpHint) | ||||
|             return 0; | ||||
|         return Irp; | ||||
|     } | ||||
| } | ||||
|  | ||||
| _IRQL_raises_(DISPATCH_LEVEL) | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolLockControl( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolLockControlComplete( | ||||
| NTSTATUS FspFsvolLockControlComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolRead( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolReadComplete( | ||||
| NTSTATUS FspFsvolReadComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -32,7 +32,7 @@ static NTSTATUS FspFsvolQuerySecurity( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolQuerySecurityComplete( | ||||
| NTSTATUS FspFsvolQuerySecurityComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
| @@ -48,7 +48,7 @@ static NTSTATUS FspFsvolSetSecurity( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolSetSecurityComplete( | ||||
| NTSTATUS FspFsvolSetSecurityComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolShutdown( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolShutdownComplete( | ||||
| NTSTATUS FspFsvolShutdownComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -251,7 +251,7 @@ static NTSTATUS FspFsvolQueryVolumeInformation( | ||||
|     return FSP_STATUS_IOQ_POST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolQueryVolumeInformationComplete( | ||||
| NTSTATUS FspFsvolQueryVolumeInformationComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
| @@ -305,7 +305,7 @@ static NTSTATUS FspFsvolSetVolumeInformation( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolSetVolumeInformationComplete( | ||||
| NTSTATUS FspFsvolSetVolumeInformationComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ static NTSTATUS FspFsvolWrite( | ||||
|     return STATUS_INVALID_DEVICE_REQUEST; | ||||
| } | ||||
|  | ||||
| VOID FspFsvolWriteComplete( | ||||
| NTSTATUS FspFsvolWriteComplete( | ||||
|     PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) | ||||
| { | ||||
|     FSP_ENTER_IOC(PAGED_CODE()); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user