[NTFS]
authorPierre Schweitzer <pierre@reactos.org>
Mon, 25 May 2015 11:58:23 +0000 (11:58 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Mon, 25 May 2015 11:58:23 +0000 (11:58 +0000)
Handle IRP_MJ_CREATTE with the dispatch routine

svn path=/trunk/; revision=67903

reactos/drivers/filesystems/ntfs/create.c
reactos/drivers/filesystems/ntfs/dispatch.c
reactos/drivers/filesystems/ntfs/ntfs.c
reactos/drivers/filesystems/ntfs/ntfs.h

index 4b7e74f..d1d3825 100644 (file)
@@ -405,43 +405,34 @@ NtfsCreateFile(PDEVICE_OBJECT DeviceObject,
      * fail immediately
      */
     Irp->IoStatus.Information = (NT_SUCCESS(Status)) ? FILE_OPENED : 0;
-    Irp->IoStatus.Status = Status;
 
     return Status;
 }
 
 
 NTSTATUS
-NTAPI
-NtfsFsdCreate(PDEVICE_OBJECT DeviceObject,
-              PIRP Irp)
+NtfsCreate(PNTFS_IRP_CONTEXT IrpContext)
 {
     PDEVICE_EXTENSION DeviceExt;
     NTSTATUS Status;
+    PDEVICE_OBJECT DeviceObject;
 
+    DeviceObject = IrpContext->DeviceObject;
     if (DeviceObject == NtfsGlobalData->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;
 
-    FsRtlEnterFileSystem();
     ExAcquireResourceExclusiveLite(&DeviceExt->DirResource,
                                    TRUE);
     Status = NtfsCreateFile(DeviceObject,
-                            Irp);
+                            IrpContext->Irp);
     ExReleaseResourceLite(&DeviceExt->DirResource);
-    FsRtlExitFileSystem();
-
-ByeBye:
-    Irp->IoStatus.Status = Status;
-    IoCompleteRequest(Irp,
-                      NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT);
 
     return Status;
 }
index 0e8a8de..88fff13 100644 (file)
@@ -100,6 +100,10 @@ NtfsDispatch(PNTFS_IRP_CONTEXT IrpContext)
         case IRP_MJ_CLOSE:
             Status = NtfsClose(IrpContext);
             break;
+
+        case IRP_MJ_CREATE:
+            Status = NtfsCreate(IrpContext);
+            break;
     }
 
     ASSERT((!(IrpContext->Flags & IRPCONTEXT_COMPLETE) && !(IrpContext->Flags & IRPCONTEXT_QUEUE)) ||
index 3acdb88..274ec82 100644 (file)
@@ -123,7 +123,7 @@ VOID
 NTAPI
 NtfsInitializeFunctionPointers(PDRIVER_OBJECT DriverObject)
 {
-    DriverObject->MajorFunction[IRP_MJ_CREATE]                   = NtfsFsdCreate;
+    DriverObject->MajorFunction[IRP_MJ_CREATE]                   = NtfsFsdDispatch;
     DriverObject->MajorFunction[IRP_MJ_CLOSE]                    = NtfsFsdDispatch;
     DriverObject->MajorFunction[IRP_MJ_READ]                     = NtfsFsdDispatch;
     DriverObject->MajorFunction[IRP_MJ_WRITE]                    = NtfsFsdDispatch;
index 7c6e5fe..20e3016 100644 (file)
@@ -527,10 +527,8 @@ NtfsClose(PNTFS_IRP_CONTEXT IrpContext);
 
 /* create.c */
 
-DRIVER_DISPATCH NtfsFsdCreate;
-NTSTATUS NTAPI
-NtfsFsdCreate(PDEVICE_OBJECT DeviceObject,
-              PIRP Irp);
+NTSTATUS
+NtfsCreate(PNTFS_IRP_CONTEXT IrpContext);
 
 
 /* devctl.c */