From 102fea8ac8a245b5ed786410344c5964452ceb7e Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 1 Jun 2015 19:22:42 +0000 Subject: [PATCH] [CDFS] Finally queue IRP_MJ_CREATE IRPs too. svn path=/trunk/; revision=67997 --- reactos/drivers/filesystems/cdfs/cdfs.c | 2 +- reactos/drivers/filesystems/cdfs/cdfs.h | 6 ++---- reactos/drivers/filesystems/cdfs/create.c | 23 ++++++++++----------- reactos/drivers/filesystems/cdfs/dispatch.c | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/reactos/drivers/filesystems/cdfs/cdfs.c b/reactos/drivers/filesystems/cdfs/cdfs.c index 0b94a75387b..cd0ca892ca8 100644 --- a/reactos/drivers/filesystems/cdfs/cdfs.c +++ b/reactos/drivers/filesystems/cdfs/cdfs.c @@ -81,7 +81,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, DeviceObject->Flags = DO_DIRECT_IO; DriverObject->MajorFunction[IRP_MJ_CLOSE] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_CLEANUP] = CdfsFsdDispatch; - DriverObject->MajorFunction[IRP_MJ_CREATE] = CdfsCreate; + DriverObject->MajorFunction[IRP_MJ_CREATE] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_READ] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_WRITE] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = CdfsFsdDispatch; diff --git a/reactos/drivers/filesystems/cdfs/cdfs.h b/reactos/drivers/filesystems/cdfs/cdfs.h index 9c24f9dd5cd..7f4162ecca7 100644 --- a/reactos/drivers/filesystems/cdfs/cdfs.h +++ b/reactos/drivers/filesystems/cdfs/cdfs.h @@ -319,12 +319,10 @@ CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, /* create.c */ -DRIVER_DISPATCH CdfsCreate; - NTSTATUS NTAPI -CdfsCreate(PDEVICE_OBJECT DeviceObject, - PIRP Irp); +CdfsCreate( + PCDFS_IRP_CONTEXT IrpContext); /* devctrl.c */ diff --git a/reactos/drivers/filesystems/cdfs/create.c b/reactos/drivers/filesystems/cdfs/create.c index 8695d845fc8..fc7f7bfa60f 100644 --- a/reactos/drivers/filesystems/cdfs/create.c +++ b/reactos/drivers/filesystems/cdfs/create.c @@ -247,26 +247,30 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject, * fail immediately */ Irp->IoStatus.Information = (NT_SUCCESS(Status)) ? FILE_OPENED : 0; - Irp->IoStatus.Status = Status; return Status; } NTSTATUS NTAPI -CdfsCreate(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +CdfsCreate( + PCDFS_IRP_CONTEXT IrpContext) { + PDEVICE_OBJECT DeviceObject; PDEVICE_EXTENSION DeviceExt; NTSTATUS Status; + DPRINT("CdfsCreate()\n"); + + ASSERT(IrpContext); + + DeviceObject = IrpContext->DeviceObject; if (DeviceObject == CdfsGlobalData->DeviceObject) { /* DeviceObject represents FileSystem instead of logical volume */ DPRINT("Opening file system\n"); - Irp->IoStatus.Information = FILE_OPENED; - Status = STATUS_SUCCESS; - goto ByeBye; + IrpContext->Irp->IoStatus.Information = FILE_OPENED; + return STATUS_SUCCESS; } DeviceExt = DeviceObject->DeviceExtension; @@ -275,15 +279,10 @@ CdfsCreate(PDEVICE_OBJECT DeviceObject, ExAcquireResourceExclusiveLite(&DeviceExt->DirResource, TRUE); Status = CdfsCreateFile(DeviceObject, - Irp); + IrpContext->Irp); ExReleaseResourceLite(&DeviceExt->DirResource); KeLeaveCriticalRegion(); -ByeBye: - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, - NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); - return Status; } diff --git a/reactos/drivers/filesystems/cdfs/dispatch.c b/reactos/drivers/filesystems/cdfs/dispatch.c index 024039ba872..a8506942602 100644 --- a/reactos/drivers/filesystems/cdfs/dispatch.c +++ b/reactos/drivers/filesystems/cdfs/dispatch.c @@ -105,7 +105,7 @@ CdfsDispatch(PCDFS_IRP_CONTEXT IrpContext) break; case IRP_MJ_CREATE: -// Status = CdfsCreate(IrpContext); + Status = CdfsCreate(IrpContext); break; case IRP_MJ_CLEANUP: