mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: FSP_IOCMPL_DISPATCH now returns NTSTATUS
This commit is contained in:
parent
c9fb46ff11
commit
eda129ae81
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user