sys: IRP_MJ_READ, IRP_MJ_WRITE

This commit is contained in:
Bill Zissimopoulos 2016-03-04 19:44:43 -08:00
parent bf02a601b2
commit 55a86ba8c6
2 changed files with 11 additions and 2 deletions

View File

@ -277,7 +277,9 @@ NTSTATUS FspFsvolReadComplete(
{ {
FSP_ENTER_IOC(PAGED_CODE()); FSP_ENTER_IOC(PAGED_CODE());
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
FSP_FILE_NODE *FileNode = FileObject->FsContext;
LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset; LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset;
BOOLEAN PagingIo = BooleanFlagOn(Irp->Flags, IRP_PAGING_IO); BOOLEAN PagingIo = BooleanFlagOn(Irp->Flags, IRP_PAGING_IO);
BOOLEAN SynchronousIo = BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO); BOOLEAN SynchronousIo = BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO);
@ -297,6 +299,9 @@ NTSTATUS FspFsvolReadComplete(
ReadOffset.QuadPart + Response->IoStatus.Information; ReadOffset.QuadPart + Response->IoStatus.Information;
} }
FspFileNodeReleaseOwner(FileNode, Full, Request);
/* will also clear FspIrpFlags() */
Irp->IoStatus.Information = Response->IoStatus.Information; Irp->IoStatus.Information = Response->IoStatus.Information;
Result = STATUS_SUCCESS; Result = STATUS_SUCCESS;
@ -338,7 +343,7 @@ static VOID FspFsvolReadNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV
if (0 != SafeMdl) if (0 != SafeMdl)
FspSafeMdlDelete(SafeMdl); FspSafeMdlDelete(SafeMdl);
if (0 != Irp) if (0 != Irp && 0 != FspIrpFlags(Irp))
{ {
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext; FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext;

View File

@ -368,6 +368,7 @@ NTSTATUS FspFsvolWriteComplete(
{ {
FSP_ENTER_IOC(PAGED_CODE()); FSP_ENTER_IOC(PAGED_CODE());
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
FSP_FILE_NODE *FileNode = FileObject->FsContext; FSP_FILE_NODE *FileNode = FileObject->FsContext;
LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset; LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset;
@ -395,6 +396,9 @@ NTSTATUS FspFsvolWriteComplete(
WriteOffset.QuadPart + Response->IoStatus.Information; WriteOffset.QuadPart + Response->IoStatus.Information;
} }
FspFileNodeReleaseOwner(FileNode, Full, Request);
/* will also clear FspIrpFlags() */
Irp->IoStatus.Information = Response->IoStatus.Information; Irp->IoStatus.Information = Response->IoStatus.Information;
Result = STATUS_SUCCESS; Result = STATUS_SUCCESS;
@ -436,7 +440,7 @@ static VOID FspFsvolWriteNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, P
if (0 != SafeMdl) if (0 != SafeMdl)
FspSafeMdlDelete(SafeMdl); FspSafeMdlDelete(SafeMdl);
if (0 != Irp) if (0 != Irp && 0 != FspIrpFlags(Irp))
{ {
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext; FSP_FILE_NODE *FileNode = IrpSp->FileObject->FsContext;