From edef9fdfae6d1b82749f18c037d3cd41884c779f Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 10 May 2015 20:35:40 +0000 Subject: [PATCH] [NTFS] Handle IRP_MJ_READ with the dispatch routine svn path=/trunk/; revision=67634 --- reactos/drivers/filesystems/ntfs/dispatch.c | 4 ++++ reactos/drivers/filesystems/ntfs/ntfs.c | 2 +- reactos/drivers/filesystems/ntfs/ntfs.h | 6 ++---- reactos/drivers/filesystems/ntfs/rw.c | 19 +++++++++---------- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/dispatch.c b/reactos/drivers/filesystems/ntfs/dispatch.c index 7a08fc15c60..6f42b4163e3 100644 --- a/reactos/drivers/filesystems/ntfs/dispatch.c +++ b/reactos/drivers/filesystems/ntfs/dispatch.c @@ -76,6 +76,10 @@ NtfsFsdDispatch(PDEVICE_OBJECT DeviceObject, case IRP_MJ_DIRECTORY_CONTROL: Status = NtfsDirectoryControl(IrpContext); break; + + case IRP_MJ_READ: + Status = NtfsRead(IrpContext); + break; } } else diff --git a/reactos/drivers/filesystems/ntfs/ntfs.c b/reactos/drivers/filesystems/ntfs/ntfs.c index 304b2904b8f..918bcb389b5 100644 --- a/reactos/drivers/filesystems/ntfs/ntfs.c +++ b/reactos/drivers/filesystems/ntfs/ntfs.c @@ -121,7 +121,7 @@ NtfsInitializeFunctionPointers(PDRIVER_OBJECT DriverObject) { DriverObject->MajorFunction[IRP_MJ_CREATE] = NtfsFsdCreate; DriverObject->MajorFunction[IRP_MJ_CLOSE] = NtfsFsdClose; - DriverObject->MajorFunction[IRP_MJ_READ] = NtfsFsdRead; + DriverObject->MajorFunction[IRP_MJ_READ] = NtfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_WRITE] = NtfsFsdWrite; DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = NtfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = NtfsFsdDispatch; diff --git a/reactos/drivers/filesystems/ntfs/ntfs.h b/reactos/drivers/filesystems/ntfs/ntfs.h index e4e2a34950c..05d63e8ec7d 100644 --- a/reactos/drivers/filesystems/ntfs/ntfs.h +++ b/reactos/drivers/filesystems/ntfs/ntfs.h @@ -759,10 +759,8 @@ NtfsFileFlagsToAttributes(ULONG NtfsAttributes, /* rw.c */ -DRIVER_DISPATCH NtfsFsdRead; -NTSTATUS NTAPI -NtfsFsdRead(PDEVICE_OBJECT DeviceObject, - PIRP Irp); +NTSTATUS +NtfsRead(PNTFS_IRP_CONTEXT IrpContext); DRIVER_DISPATCH NtfsFsdWrite; NTSTATUS NTAPI diff --git a/reactos/drivers/filesystems/ntfs/rw.c b/reactos/drivers/filesystems/ntfs/rw.c index 0ae0a280394..a5b5f742f18 100644 --- a/reactos/drivers/filesystems/ntfs/rw.c +++ b/reactos/drivers/filesystems/ntfs/rw.c @@ -161,9 +161,7 @@ NtfsReadFile(PDEVICE_EXTENSION DeviceExt, NTSTATUS -NTAPI -NtfsFsdRead(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +NtfsRead(PNTFS_IRP_CONTEXT IrpContext) { PDEVICE_EXTENSION DeviceExt; PIO_STACK_LOCATION Stack; @@ -173,13 +171,17 @@ NtfsFsdRead(PDEVICE_OBJECT DeviceObject, LARGE_INTEGER ReadOffset; ULONG ReturnedReadLength = 0; NTSTATUS Status = STATUS_SUCCESS; + PIRP Irp; + PDEVICE_OBJECT DeviceObject; - DPRINT("NtfsRead(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); + DPRINT("NtfsRead(DeviceObject %p)\n", IrpContext); + + DeviceObject = IrpContext->DeviceObject; + Irp = IrpContext->Irp; + Stack = IrpContext->Stack; + FileObject = IrpContext->FileObject; DeviceExt = DeviceObject->DeviceExtension; - Stack = IoGetCurrentIrpStackLocation(Irp); - FileObject = Stack->FileObject; - ReadLength = Stack->Parameters.Read.Length; ReadOffset = Stack->Parameters.Read.ByteOffset; Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); @@ -206,9 +208,6 @@ NtfsFsdRead(PDEVICE_OBJECT DeviceObject, Irp->IoStatus.Information = 0; } - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp,IO_NO_INCREMENT); - return Status; }