From 253de2170869191185724b8daaf612e6da7d6658 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 7 Dec 2015 13:19:17 -0800 Subject: [PATCH] sys: FspIrpContext* --- src/sys/create.c | 5 ++--- src/sys/driver.h | 4 ++++ src/sys/fsctl.c | 2 +- src/sys/idevctl.c | 4 ++-- src/sys/iop.c | 16 ++++++++-------- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/sys/create.c b/src/sys/create.c index ea37f2bb..d3550e75 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -346,7 +346,7 @@ NTSTATUS FspFsvolCreatePrepare( } /* send the user-mode handle to the user-mode file system */ - Irp->Tail.Overlay.DriverContext[1] = UserModeAccessToken; + FspIrpContextHandle(Irp) = UserModeAccessToken; Request->Req.Create.AccessToken = (UINT_PTR)UserModeAccessToken; FSP_LEAVE_IOP(); @@ -388,8 +388,7 @@ VOID FspFsvolCreateComplete( ULONG Flags = IrpSp->Flags; KPROCESSOR_MODE RequestorMode = FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode; - BOOLEAN HasTrailingBackslash = - 0 != ((FSP_FSCTL_TRANSACT_REQ *)Irp->Tail.Overlay.DriverContext[0])->Req.Create.HasTrailingBackslash; + BOOLEAN HasTrailingBackslash = 0 != FspIrpContextRequest(Irp)->Req.Create.HasTrailingBackslash; FSP_FILE_CONTEXT *FsContext = FileObject->FsContext; ACCESS_MASK GrantedAccess; BOOLEAN Inserted = FALSE; diff --git a/src/sys/driver.h b/src/sys/driver.h index e7115af5..849df889 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -263,6 +263,10 @@ PIRP FspIoqEndProcessingIrp(FSP_IOQ *Ioq, UINT_PTR IrpHint); /* I/O processing */ #define FSP_FSCTL_WORK \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0x800 + 'W', METHOD_NEITHER, FILE_ANY_ACCESS) +#define FspIrpContextRequest(Irp) \ + (*(FSP_FSCTL_TRANSACT_REQ **)&(Irp)->Tail.Overlay.DriverContext[0]) +#define FspIrpContextHandle(Irp) \ + (*(HANDLE *)&(Irp)->Tail.Overlay.DriverContext[1]) NTSTATUS FspIopCreateRequest( PIRP Irp, PUNICODE_STRING FileName, ULONG ExtraSize, FSP_FSCTL_TRANSACT_REQ **PRequest); NTSTATUS FspIopPostWorkRequest(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_TRANSACT_REQ *Request); diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 6c429733..37217994 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -391,7 +391,7 @@ retry: ASSERT((PUINT8)Request + FSP_FSCTL_TRANSACT_REQ_SIZEMAX <= SystemBufferEnd); for (;;) { - PendingIrpRequest = PendingIrp->Tail.Overlay.DriverContext[0]; + PendingIrpRequest = FspIrpContextRequest(PendingIrp); Result = FspIopDispatchPrepare(PendingIrp, PendingIrpRequest); if (!NT_SUCCESS(Result)) diff --git a/src/sys/idevctl.c b/src/sys/idevctl.c index adede96a..1dcb6e45 100644 --- a/src/sys/idevctl.c +++ b/src/sys/idevctl.c @@ -42,7 +42,7 @@ static NTSTATUS FspFsvolInternalDeviceControl( /* associate the passed Request with our Irp; acquire ownership of the Request */ Request->Hint = (UINT_PTR)Irp; - Irp->Tail.Overlay.DriverContext[0] = Request; + FspIrpContextRequest(Irp) = Request; if (!FspIoqPostIrp(&FsvrtDeviceExtension->Ioq, Irp)) { @@ -51,7 +51,7 @@ static NTSTATUS FspFsvolInternalDeviceControl( /* disocciate the Request from our Irp; release ownership back to caller */ Request->Hint = 0; - Irp->Tail.Overlay.DriverContext[0] = 0; + FspIrpContextRequest(Irp) = 0; Result = STATUS_CANCELLED; goto exit; diff --git a/src/sys/iop.c b/src/sys/iop.c index a835d038..9b394413 100644 --- a/src/sys/iop.c +++ b/src/sys/iop.c @@ -58,7 +58,7 @@ NTSTATUS FspIopCreateRequest( } if (0 != Irp) - Irp->Tail.Overlay.DriverContext[0] = Request; + FspIrpContextRequest(Irp) = Request; *PRequest = Request; return STATUS_SUCCESS; @@ -125,24 +125,24 @@ VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease) ASSERT(STATUS_PENDING != Result); ASSERT(0 == Irp->Tail.Overlay.DriverContext[3]); - if (0 != Irp->Tail.Overlay.DriverContext[0]) + if (0 != FspIrpContextRequest(Irp)) { - FspIopDeleteRequest(Irp->Tail.Overlay.DriverContext[0]); - Irp->Tail.Overlay.DriverContext[0] = 0; + FspIopDeleteRequest(FspIrpContextRequest(Irp)); + FspIrpContextRequest(Irp) = 0; } - if (0 != Irp->Tail.Overlay.DriverContext[1]) + if (0 != FspIrpContextHandle(Irp)) { #if DBG NTSTATUS Result0; - Result0 = ObCloseHandle(Irp->Tail.Overlay.DriverContext[1], KernelMode); + Result0 = ObCloseHandle(FspIrpContextHandle(Irp), KernelMode); if (!NT_SUCCESS(Result0)) DEBUGLOG("ObCloseHandle() = %s", NtStatusSym(Result0)); #else - ObCloseHandle(Irp->Tail.Overlay.DriverContext[1], KernelMode); + ObCloseHandle(FspIrpContextHandle(Irp), KernelMode); #endif - Irp->Tail.Overlay.DriverContext[1] = 0; + FspIrpContextHandle(Irp) = 0; } PDEVICE_OBJECT DeviceObject = IoGetCurrentIrpStackLocation(Irp)->DeviceObject;