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

View file

@ -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;

View file

@ -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 */

View file

@ -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;
}

View file

@ -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: