sys: FSP_IOCMPL_DISPATCH now returns NTSTATUS

This commit is contained in:
Bill Zissimopoulos 2016-01-27 11:59:52 -08:00
parent c9fb46ff11
commit eda129ae81
18 changed files with 37 additions and 39 deletions

View File

@ -82,7 +82,7 @@ static NTSTATUS FspFsvolCleanup(
*/
}
VOID FspFsvolCleanupComplete(
NTSTATUS FspFsvolCleanupComplete(
PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response)
{
FSP_ENTER_IOC(PAGED_CODE());

View File

@ -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());

View File

@ -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);

View File

@ -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());

View File

@ -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());

View File

@ -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 */

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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)

View File

@ -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)

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());