diff --git a/src/sys/read.c b/src/sys/read.c index 9bc00b59..fd772a2b 100644 --- a/src/sys/read.c +++ b/src/sys/read.c @@ -277,7 +277,9 @@ NTSTATUS FspFsvolReadComplete( { FSP_ENTER_IOC(PAGED_CODE()); + FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); PFILE_OBJECT FileObject = IrpSp->FileObject; + FSP_FILE_NODE *FileNode = FileObject->FsContext; LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset; BOOLEAN PagingIo = BooleanFlagOn(Irp->Flags, IRP_PAGING_IO); BOOLEAN SynchronousIo = BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO); @@ -297,6 +299,9 @@ NTSTATUS FspFsvolReadComplete( ReadOffset.QuadPart + Response->IoStatus.Information; } + FspFileNodeReleaseOwner(FileNode, Full, Request); + /* will also clear FspIrpFlags() */ + Irp->IoStatus.Information = Response->IoStatus.Information; Result = STATUS_SUCCESS; @@ -338,7 +343,7 @@ static VOID FspFsvolReadNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV if (0 != SafeMdl) FspSafeMdlDelete(SafeMdl); - if (0 != Irp) + if (0 != Irp && 0 != FspIrpFlags(Irp)) { PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext; diff --git a/src/sys/write.c b/src/sys/write.c index 87a53123..e3eba3a8 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -368,6 +368,7 @@ NTSTATUS FspFsvolWriteComplete( { FSP_ENTER_IOC(PAGED_CODE()); + FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp); PFILE_OBJECT FileObject = IrpSp->FileObject; FSP_FILE_NODE *FileNode = FileObject->FsContext; LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset; @@ -395,6 +396,9 @@ NTSTATUS FspFsvolWriteComplete( WriteOffset.QuadPart + Response->IoStatus.Information; } + FspFileNodeReleaseOwner(FileNode, Full, Request); + /* will also clear FspIrpFlags() */ + Irp->IoStatus.Information = Response->IoStatus.Information; Result = STATUS_SUCCESS; @@ -436,7 +440,7 @@ static VOID FspFsvolWriteNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, P if (0 != SafeMdl) FspSafeMdlDelete(SafeMdl); - if (0 != Irp) + if (0 != Irp && 0 != FspIrpFlags(Irp)) { PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext;