mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 17:03:12 -05:00
sys: complete functions may repost IRP by setting Result to STATUS_PENDING
This commit is contained in:
parent
cafa15f1e4
commit
9d9eb44f0b
@ -152,11 +152,14 @@ extern __declspec(selectany) int bpglobal = 1;
|
|||||||
(LONGLONG)Irp->IoStatus.Information);\
|
(LONGLONG)Irp->IoStatus.Information);\
|
||||||
if (STATUS_PENDING == Result) \
|
if (STATUS_PENDING == Result) \
|
||||||
{ \
|
{ \
|
||||||
/* repost request! */ \
|
if (0 == (IrpSp->Control & SL_PENDING_RETURNED))\
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *fsp_leave_FsvolDeviceExtension =\
|
{ \
|
||||||
FspFsvolDeviceExtension(IrpSp->DeviceObject);\
|
/* if the IRP has not been marked pending already */\
|
||||||
if (!FspIoqPostIrp(fsp_leave_FsvolDeviceExtension->Ioq, Irp, &Result))\
|
FSP_FSVOL_DEVICE_EXTENSION *fsp_leave_FsvolDeviceExtension =\
|
||||||
FspIopCompleteIrp(Irp, Result);\
|
FspFsvolDeviceExtension(IrpSp->DeviceObject);\
|
||||||
|
if (!FspIoqPostIrp(fsp_leave_FsvolDeviceExtension->Ioq, Irp, &Result))\
|
||||||
|
FspIopCompleteIrp(Irp, Result);\
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
FspIopCompleteIrp(Irp, Result);\
|
FspIopCompleteIrp(Irp, Result);\
|
||||||
@ -389,6 +392,7 @@ NTSTATUS FspIopCreateRequestFunnel(
|
|||||||
PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_IOP_REQUEST_FINI *RequestFini,
|
PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_IOP_REQUEST_FINI *RequestFini,
|
||||||
BOOLEAN MustSucceed,
|
BOOLEAN MustSucceed,
|
||||||
FSP_FSCTL_TRANSACT_REQ **PRequest);
|
FSP_FSCTL_TRANSACT_REQ **PRequest);
|
||||||
|
VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
||||||
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
||||||
|
@ -10,7 +10,7 @@ NTSTATUS FspIopCreateRequestFunnel(
|
|||||||
PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_IOP_REQUEST_FINI *RequestFini,
|
PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_IOP_REQUEST_FINI *RequestFini,
|
||||||
BOOLEAN MustSucceed,
|
BOOLEAN MustSucceed,
|
||||||
FSP_FSCTL_TRANSACT_REQ **PRequest);
|
FSP_FSCTL_TRANSACT_REQ **PRequest);
|
||||||
static VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
||||||
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
||||||
@ -129,7 +129,7 @@ NTSTATUS FspIopCreateRequestFunnel(
|
|||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request)
|
VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user