sys: FspIopCompleteRequestEx

This commit is contained in:
Bill Zissimopoulos 2015-12-03 21:53:43 -08:00
parent 6bfb23e77d
commit b72adb6c97
2 changed files with 11 additions and 4 deletions

View File

@ -83,6 +83,7 @@
#define FSP_ENTER_MJ(...) \ #define FSP_ENTER_MJ(...) \
NTSTATUS Result = STATUS_SUCCESS; \ NTSTATUS Result = STATUS_SUCCESS; \
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);\ PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);\
BOOLEAN fsp_device_release = FALSE; \
FSP_ENTER_(__VA_ARGS__); \ FSP_ENTER_(__VA_ARGS__); \
do \ do \
{ \ { \
@ -91,6 +92,7 @@
Result = STATUS_CANCELLED; \ Result = STATUS_CANCELLED; \
goto fsp_leave_label; \ goto fsp_leave_label; \
} \ } \
fsp_device_release = TRUE; \
} while (0,0) } while (0,0)
#define FSP_LEAVE_MJ(fmt, ...) \ #define FSP_LEAVE_MJ(fmt, ...) \
FSP_LEAVE_( \ FSP_LEAVE_( \
@ -122,7 +124,7 @@
} \ } \
} \ } \
else \ else \
FspIopCompleteRequest(Irp, Result);\ FspIopCompleteRequestEx(Irp, Result, fsp_device_release);\
); \ ); \
return Result return Result
#define FSP_ENTER_IOC(...) \ #define FSP_ENTER_IOC(...) \
@ -248,7 +250,11 @@ PIRP FspIoqEndProcessingIrp(FSP_IOQ *Ioq, UINT_PTR IrpHint);
/* I/O processing */ /* I/O processing */
NTSTATUS FspIopCreateRequest( NTSTATUS FspIopCreateRequest(
PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_FSCTL_TRANSACT_REQ **PRequest); PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_FSCTL_TRANSACT_REQ **PRequest);
VOID FspIopCompleteRequest(PIRP Irp, NTSTATUS Result); VOID FspIopCompleteRequestEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease);
static inline VOID FspIopCompleteRequest(PIRP Irp, NTSTATUS Result)
{
FspIopCompleteRequestEx(Irp, Result, TRUE);
}
VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
/* device management */ /* device management */

View File

@ -51,7 +51,7 @@ NTSTATUS FspIopCreateRequest(
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
VOID FspIopCompleteRequest(PIRP Irp, NTSTATUS Result) VOID FspIopCompleteRequestEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease)
{ {
// !PAGED_CODE(); // !PAGED_CODE();
@ -70,6 +70,7 @@ VOID FspIopCompleteRequest(PIRP Irp, NTSTATUS Result)
Irp->IoStatus.Status = Result; Irp->IoStatus.Status = Result;
IoCompleteRequest(Irp, FSP_IO_INCREMENT); IoCompleteRequest(Irp, FSP_IO_INCREMENT);
if (DeviceRelease)
FspDeviceRelease(DeviceObject); FspDeviceRelease(DeviceObject);
} }