diff --git a/src/sys/driver.h b/src/sys/driver.h index 3851c3e8..3f3b1630 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -699,6 +699,9 @@ enum #define FspIopCompleteIrp(I, R) FspIopCompleteIrpEx(I, R, TRUE) #define REQ_ALIGN_SIZE 16 typedef VOID FSP_IOP_REQUEST_FINI(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[4]); +typedef NTSTATUS FSP_IOP_REQUEST_WORK( + PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, + BOOLEAN CanWait); typedef struct { FSP_IOP_REQUEST_FINI *RequestFini; @@ -745,11 +748,8 @@ enum { FspWqRequestWorkRoutine = 3, }; -typedef NTSTATUS FSP_WQ_REQUEST_WORK( - PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, - BOOLEAN CanWait); NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, - FSP_WQ_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, + FSP_IOP_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, BOOLEAN CreateAndPost); VOID FspWqPostIrpWorkItem(PIRP Irp); #define FspWqCreateIrpWorkItem(I, RW, RF)\ diff --git a/src/sys/wq.c b/src/sys/wq.c index ac82ae3f..b4501091 100644 --- a/src/sys/wq.c +++ b/src/sys/wq.c @@ -20,12 +20,12 @@ static VOID FspWqWorkRoutine(PVOID Context); NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, - FSP_WQ_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, + FSP_IOP_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, BOOLEAN CreateAndPost) { - FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); + FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); - if (0 == RequestWorkItem) + if (0 == Request) { NTSTATUS Result; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); @@ -43,15 +43,15 @@ NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, } Result = FspIopCreateRequestWorkItem(Irp, sizeof(WORK_QUEUE_ITEM), - RequestFini, &RequestWorkItem); + RequestFini, &Request); if (!NT_SUCCESS(Result)) return Result; - ASSERT(sizeof(FSP_WQ_REQUEST_WORK *) == sizeof(PVOID)); + ASSERT(sizeof(FSP_IOP_REQUEST_WORK *) == sizeof(PVOID)); - FspIopRequestContext(RequestWorkItem, FspWqRequestWorkRoutine) = + FspIopRequestContext(Request, FspWqRequestWorkRoutine) = (PVOID)(UINT_PTR)WorkRoutine; - ExInitializeWorkItem((PWORK_QUEUE_ITEM)&RequestWorkItem->Buffer, FspWqWorkRoutine, Irp); + ExInitializeWorkItem((PWORK_QUEUE_ITEM)&Request->Buffer, FspWqWorkRoutine, Irp); } if (!CreateAndPost) @@ -63,14 +63,14 @@ NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, VOID FspWqPostIrpWorkItem(PIRP Irp) { - FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); + FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); - ASSERT(RequestWorkItem->Kind == FspFsctlTransactReservedKind); - ASSERT(RequestWorkItem->Size == sizeof *RequestWorkItem + sizeof(WORK_QUEUE_ITEM)); - ASSERT(RequestWorkItem->Hint == (UINT_PTR)Irp); + ASSERT(Request->Kind == FspFsctlTransactReservedKind); + ASSERT(Request->Size == sizeof *Request + sizeof(WORK_QUEUE_ITEM)); + ASSERT(Request->Hint == (UINT_PTR)Irp); IoMarkIrpPending(Irp); - ExQueueWorkItem((PWORK_QUEUE_ITEM)&RequestWorkItem->Buffer, CriticalWorkQueue); + ExQueueWorkItem((PWORK_QUEUE_ITEM)&Request->Buffer, CriticalWorkQueue); } static VOID FspWqWorkRoutine(PVOID Context) @@ -78,9 +78,9 @@ static VOID FspWqWorkRoutine(PVOID Context) PIRP Irp = Context; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PDEVICE_OBJECT DeviceObject = IrpSp->DeviceObject; - FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); - FSP_WQ_REQUEST_WORK *WorkRoutine = (FSP_WQ_REQUEST_WORK *)(UINT_PTR) - FspIopRequestContext(RequestWorkItem, FspWqRequestWorkRoutine); + FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); + FSP_IOP_REQUEST_WORK *WorkRoutine = (FSP_IOP_REQUEST_WORK *)(UINT_PTR) + FspIopRequestContext(Request, FspWqRequestWorkRoutine); NTSTATUS Result; IoSetTopLevelIrp(Irp);