mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -05:00
sys: IRP_MJ_READ, IRP_MJ_WRITE
This commit is contained in:
parent
bf02a601b2
commit
55a86ba8c6
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user