1
0
Fork 0
mirror of https://github.com/reactos/reactos.git synced 2025-06-06 09:50:43 +00:00
Finally queue IRP_MJ_CREATE IRPs too.

svn path=/trunk/; revision=67997
This commit is contained in:
Eric Kohl 2015-06-01 19:22:42 +00:00
parent 5ff668f298
commit 102fea8ac8
4 changed files with 15 additions and 18 deletions
reactos/drivers/filesystems/cdfs

View file

@ -81,7 +81,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
DeviceObject->Flags = DO_DIRECT_IO; DeviceObject->Flags = DO_DIRECT_IO;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_CLOSE] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = 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_READ] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_WRITE] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_WRITE] = CdfsFsdDispatch;
DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = CdfsFsdDispatch; DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = CdfsFsdDispatch;

View file

@ -319,12 +319,10 @@ CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject,
/* create.c */ /* create.c */
DRIVER_DISPATCH CdfsCreate;
NTSTATUS NTSTATUS
NTAPI NTAPI
CdfsCreate(PDEVICE_OBJECT DeviceObject, CdfsCreate(
PIRP Irp); PCDFS_IRP_CONTEXT IrpContext);
/* devctrl.c */ /* devctrl.c */

View file

@ -247,26 +247,30 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject,
* fail immediately * fail immediately
*/ */
Irp->IoStatus.Information = (NT_SUCCESS(Status)) ? FILE_OPENED : 0; Irp->IoStatus.Information = (NT_SUCCESS(Status)) ? FILE_OPENED : 0;
Irp->IoStatus.Status = Status;
return Status; return Status;
} }
NTSTATUS NTAPI NTSTATUS NTAPI
CdfsCreate(PDEVICE_OBJECT DeviceObject, CdfsCreate(
PIRP Irp) PCDFS_IRP_CONTEXT IrpContext)
{ {
PDEVICE_OBJECT DeviceObject;
PDEVICE_EXTENSION DeviceExt; PDEVICE_EXTENSION DeviceExt;
NTSTATUS Status; NTSTATUS Status;
DPRINT("CdfsCreate()\n");
ASSERT(IrpContext);
DeviceObject = IrpContext->DeviceObject;
if (DeviceObject == CdfsGlobalData->DeviceObject) if (DeviceObject == CdfsGlobalData->DeviceObject)
{ {
/* DeviceObject represents FileSystem instead of logical volume */ /* DeviceObject represents FileSystem instead of logical volume */
DPRINT("Opening file system\n"); DPRINT("Opening file system\n");
Irp->IoStatus.Information = FILE_OPENED; IrpContext->Irp->IoStatus.Information = FILE_OPENED;
Status = STATUS_SUCCESS; return STATUS_SUCCESS;
goto ByeBye;
} }
DeviceExt = DeviceObject->DeviceExtension; DeviceExt = DeviceObject->DeviceExtension;
@ -275,15 +279,10 @@ CdfsCreate(PDEVICE_OBJECT DeviceObject,
ExAcquireResourceExclusiveLite(&DeviceExt->DirResource, ExAcquireResourceExclusiveLite(&DeviceExt->DirResource,
TRUE); TRUE);
Status = CdfsCreateFile(DeviceObject, Status = CdfsCreateFile(DeviceObject,
Irp); IrpContext->Irp);
ExReleaseResourceLite(&DeviceExt->DirResource); ExReleaseResourceLite(&DeviceExt->DirResource);
KeLeaveCriticalRegion(); KeLeaveCriticalRegion();
ByeBye:
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp,
NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT);
return Status; return Status;
} }

View file

@ -105,7 +105,7 @@ CdfsDispatch(PCDFS_IRP_CONTEXT IrpContext)
break; break;
case IRP_MJ_CREATE: case IRP_MJ_CREATE:
// Status = CdfsCreate(IrpContext); Status = CdfsCreate(IrpContext);
break; break;
case IRP_MJ_CLEANUP: case IRP_MJ_CLEANUP: