[ros-diffs] [ion] 22868: [FORMATTING] - Fix formatting in IoCreateFile

ion at svn.reactos.org ion at svn.reactos.org
Wed Jul 5 21:55:26 CEST 2006


Author: ion
Date: Wed Jul  5 23:55:25 2006
New Revision: 22868

URL: http://svn.reactos.org/svn/reactos?rev=22868&view=rev
Log:
[FORMATTING] - Fix formatting in IoCreateFile

Modified:
    trunk/reactos/ntoskrnl/io/iomgr/file.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/file.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/file.c?rev=22868&r1=22867&r2=22868&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/file.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/file.c Wed Jul  5 23:55:25 2006
@@ -795,199 +795,121 @@
 }
 
 /*
- * NAME       EXPORTED
- *  IoCreateFile at 56
- *
- * DESCRIPTION
- *  Either causes a new file or directory to be created, or it
- *  opens an existing file, device, directory or volume, giving
- *  the caller a handle for the file object. This handle can be
- *  used by subsequent calls to manipulate data within the file
- *  or the file object's state of attributes.
- *
- * ARGUMENTS
- * FileHandle (OUT)
- *  Points to a variable which receives the file handle
- *  on return;
- *
- * DesiredAccess
- *  Desired access to the file;
- *
- * ObjectAttributes
- *  Structure describing the file;
- *
- * IoStatusBlock (OUT)
- *  Receives information about the operation on return;
- *
- * AllocationSize [OPTIONAL]
- *  Initial size of the file in bytes;
- *
- * FileAttributes
- *  Attributes to create the file with;
- *
- * ShareAccess
- *  Type of shared access the caller would like to the
- *  file;
- *
- * CreateDisposition
- *  Specifies what to do, depending on whether the
- *  file already exists;
- *
- * CreateOptions
- *  Options for creating a new file;
- *
- * EaBuffer [OPTIONAL]
- *  Undocumented;
- *
- * EaLength
- *  Undocumented;
- *
- * CreateFileType
- *  Type of file (normal, named pipe, mailslot) to create;
- *
- * ExtraCreateParameters [OPTIONAL]
- *  Additional creation data for named pipe and mailsots;
- *
- * Options
- *  Undocumented.
- *
- * RETURN VALUE
- *  Status
- *
- * NOTE
- *  Prototype taken from Bo Branten's ntifs.h v15.
- *  Description taken from old NtCreateFile's which is
- *  now a wrapper of this call.
- *
- * REVISIONS
- *
  * @implemented
  */
 NTSTATUS
-STDCALL
-IoCreateFile(OUT PHANDLE  FileHandle,
-             IN ACCESS_MASK  DesiredAccess,
+NTAPI
+IoCreateFile(OUT PHANDLE FileHandle,
+             IN ACCESS_MASK DesiredAccess,
              IN POBJECT_ATTRIBUTES ObjectAttributes,
              OUT PIO_STATUS_BLOCK IoStatusBlock,
-             IN PLARGE_INTEGER  AllocationSize  OPTIONAL,
-             IN ULONG   FileAttributes,
-             IN ULONG   ShareAccess,
-             IN ULONG   CreateDisposition,
-             IN ULONG   CreateOptions,
-             IN PVOID   EaBuffer  OPTIONAL,
-             IN ULONG   EaLength,
+             IN PLARGE_INTEGER AllocationSize  OPTIONAL,
+             IN ULONG FileAttributes,
+             IN ULONG ShareAccess,
+             IN ULONG CreateDisposition,
+             IN ULONG CreateOptions,
+             IN PVOID EaBuffer  OPTIONAL,
+             IN ULONG EaLength,
              IN CREATE_FILE_TYPE CreateFileType,
-             IN PVOID   ExtraCreateParameters OPTIONAL,
-             IN ULONG   Options)
-{
-   PFILE_OBJECT  FileObject = NULL;
-   //PDEVICE_OBJECT DeviceObject;
-   PIRP   Irp;
-   PEXTENDED_IO_STACK_LOCATION StackLoc;
-   IO_SECURITY_CONTEXT  SecurityContext;
-   KPROCESSOR_MODE      AccessMode;
-   HANDLE               LocalHandle;
-   LARGE_INTEGER        SafeAllocationSize;
-   PVOID                SystemEaBuffer = NULL;
-   NTSTATUS  Status = STATUS_SUCCESS;
-   AUX_DATA AuxData;
-   ACCESS_STATE AccessState;
+             IN PVOID ExtraCreateParameters OPTIONAL,
+             IN ULONG Options)
+{
+    PFILE_OBJECT FileObject = NULL;
+    PIRP Irp;
+    PEXTENDED_IO_STACK_LOCATION StackLoc;
+    IO_SECURITY_CONTEXT SecurityContext;
+    KPROCESSOR_MODE AccessMode;
+    HANDLE LocalHandle = 0;
+    LARGE_INTEGER SafeAllocationSize;
+    PVOID SystemEaBuffer = NULL;
+    NTSTATUS  Status = STATUS_SUCCESS;
+    AUX_DATA AuxData;
+    ACCESS_STATE AccessState;
     KIRQL OldIrql;
     PKNORMAL_ROUTINE NormalRoutine;
     PVOID NormalContext;
-
-   DPRINT("IoCreateFile(FileHandle 0x%p, DesiredAccess %x, "
-          "ObjectAttributes 0x%p ObjectAttributes->ObjectName->Buffer %S)\n",
-          FileHandle,DesiredAccess,ObjectAttributes,
-          ObjectAttributes->ObjectName->Buffer);
-
-   ASSERT_IRQL(PASSIVE_LEVEL);
-
-   if (IoStatusBlock == NULL || FileHandle == NULL)
-     return STATUS_ACCESS_VIOLATION;
-
-   LocalHandle = 0;
-
-   if(Options & IO_NO_PARAMETER_CHECKING)
-     AccessMode = KernelMode;
-   else
-     AccessMode = ExGetPreviousMode();
-
-   if(AccessMode != KernelMode)
-   {
-     _SEH_TRY
-     {
-       ProbeForWriteHandle(FileHandle);
-       ProbeForWrite(IoStatusBlock,
-                     sizeof(IO_STATUS_BLOCK),
-                     sizeof(ULONG));
-       if(AllocationSize != NULL)
-       {
-         SafeAllocationSize = ProbeForReadLargeInteger(AllocationSize);
-       }
-       else
-         SafeAllocationSize.QuadPart = 0;
-
-       if(EaBuffer != NULL && EaLength > 0)
-       {
-         ProbeForRead(EaBuffer,
-                      EaLength,
-                      sizeof(ULONG));
-
-         /* marshal EaBuffer */
-         SystemEaBuffer = ExAllocatePool(NonPagedPool,
-                                         EaLength);
-         if(SystemEaBuffer == NULL)
-         {
-           Status = STATUS_INSUFFICIENT_RESOURCES;
-           _SEH_LEAVE;
-         }
-
-         RtlCopyMemory(SystemEaBuffer,
-                       EaBuffer,
-                       EaLength);
-       }
-     }
-     _SEH_HANDLE
-     {
-       Status = _SEH_GetExceptionCode();
-     }
-     _SEH_END;
-
-     if(!NT_SUCCESS(Status))
-     {
-       return Status;
-     }
-   }
-   else
-   {
-     if(AllocationSize != NULL)
-       SafeAllocationSize = *AllocationSize;
-     else
-       SafeAllocationSize.QuadPart = 0;
-
-     if(EaBuffer != NULL && EaLength > 0)
-     {
-       SystemEaBuffer = EaBuffer;
-     }
-   }
-
-   if(Options & IO_CHECK_CREATE_PARAMETERS)
-   {
-     DPRINT1("FIXME: IO_CHECK_CREATE_PARAMETERS not yet supported!\n");
-   }
-
-   RtlMapGenericMask(&DesiredAccess, &IoFileObjectType->TypeInfo.GenericMapping);
-
-   /* First try to open an existing named object */
-   Status = ObOpenObjectByName(ObjectAttributes,
-                               NULL,
-                               AccessMode,
-                               NULL,
-                               DesiredAccess,
-                               NULL,
-                               &LocalHandle);
-
+    PAGED_CODE();
+
+    if(Options & IO_NO_PARAMETER_CHECKING)
+    {
+        AccessMode = KernelMode;
+    }
+    else
+    {
+        AccessMode = ExGetPreviousMode();
+    }
+
+    if(AccessMode != KernelMode)
+    {
+        _SEH_TRY
+        {
+            ProbeForWriteHandle(FileHandle);
+            ProbeForWrite(IoStatusBlock,
+                          sizeof(IO_STATUS_BLOCK),
+                          sizeof(ULONG));
+            if (AllocationSize)
+            {
+                SafeAllocationSize = ProbeForReadLargeInteger(AllocationSize);
+            }
+            else
+            {
+                SafeAllocationSize.QuadPart = 0;
+            }
+
+            if ((EaBuffer) && (EaLength))
+            {
+                ProbeForRead(EaBuffer,
+                             EaLength,
+                             sizeof(ULONG));
+
+                /* marshal EaBuffer */
+                SystemEaBuffer = ExAllocatePool(NonPagedPool, EaLength);
+                if(!SystemEaBuffer)
+                {
+                    Status = STATUS_INSUFFICIENT_RESOURCES;
+                    _SEH_LEAVE;
+                }
+
+                RtlCopyMemory(SystemEaBuffer, EaBuffer, EaLength);
+            }
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+
+        if(!NT_SUCCESS(Status)) return Status;
+    }
+    else
+    {
+        if (AllocationSize)
+        {
+            SafeAllocationSize = *AllocationSize;
+        }
+        else
+        {
+            SafeAllocationSize.QuadPart = 0;
+        }
+
+        if ((EaBuffer) && (EaLength)) SystemEaBuffer = EaBuffer;
+    }
+
+    if(Options & IO_CHECK_CREATE_PARAMETERS)
+    {
+        DPRINT1("FIXME: IO_CHECK_CREATE_PARAMETERS not yet supported!\n");
+    }
+
+    RtlMapGenericMask(&DesiredAccess, &IoFileObjectType->TypeInfo.GenericMapping);
+
+    /* First try to open an existing named object */
+    Status = ObOpenObjectByName(ObjectAttributes,
+                                NULL,
+                                AccessMode,
+                                NULL,
+                                DesiredAccess,
+                                NULL,
+                                &LocalHandle);
     ObReferenceObjectByHandle(LocalHandle,
                               DesiredAccess,
                               NULL,
@@ -999,10 +921,6 @@
     FileObject->Type = IO_TYPE_FILE;
     FileObject->Size = sizeof(FILE_OBJECT);
 
-   //
-   // stop stuff that should be in IopParseDevice
-   //
-
     if (CreateOptions &
         (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT))
     {
@@ -1034,107 +952,84 @@
     {
         FileObject->Flags |= FO_OPENED_CASE_SENSITIVE;
     }
-    /* 
-     * FIXME: We should get the access state from Ob once this function becomes
-     * a parse routine once the Ob is refactored.
-     */
-   SeCreateAccessState(&AccessState, &AuxData, FILE_ALL_ACCESS, NULL);
-
-   SecurityContext.SecurityQos = NULL; /* ?? */
-   SecurityContext.AccessState = &AccessState;
-   SecurityContext.DesiredAccess = DesiredAccess;
-   SecurityContext.FullCreateOptions = CreateOptions;
-
-   KeInitializeEvent(&FileObject->Lock, SynchronizationEvent, TRUE);
-   KeInitializeEvent(&FileObject->Event, NotificationEvent, FALSE);
-
-   DPRINT("FileObject 0x%p\n", FileObject);
-   DPRINT("FileObject->DeviceObject 0x%p\n", FileObject->DeviceObject);
-   /*
-    * Create a new IRP to hand to
-    * the FS driver: this may fail
-    * due to resource shortage.
-    */
-   Irp = IoAllocateIrp(FileObject->DeviceObject->StackSize, FALSE);
-   if (Irp == NULL)
-     {
-       ZwClose(LocalHandle);
-       return STATUS_UNSUCCESSFUL;
-     }
-
-   /* Now set the IRP data */
-   Irp->Tail.Overlay.OriginalFileObject = FileObject;
-   Irp->RequestorMode = AccessMode;
-   Irp->Flags = IRP_CREATE_OPERATION |
-                IRP_SYNCHRONOUS_API |
-                IRP_DEFER_IO_COMPLETION;
-   Irp->Tail.Overlay.Thread = PsGetCurrentThread();
-   Irp->UserEvent = &FileObject->Event;
-   Irp->UserIosb = IoStatusBlock;
-   Irp->MdlAddress = NULL;
-   Irp->PendingReturned = FALSE;
-   Irp->UserEvent = NULL;
-   Irp->Cancel = FALSE;
-   Irp->CancelRoutine = NULL;
-   Irp->Tail.Overlay.AuxiliaryBuffer = NULL;
-
-   /*
-    * Get the stack location for the new
-    * IRP and prepare it.
-    */
-   StackLoc = (PEXTENDED_IO_STACK_LOCATION)IoGetNextIrpStackLocation(Irp);
-   StackLoc->Control = 0;
-   StackLoc->FileObject = FileObject;
-
-     switch (CreateFileType)
-     {
-       default:
-       case CreateFileTypeNone:
-         StackLoc->MajorFunction = IRP_MJ_CREATE;
-         StackLoc->Flags = Options;
-         StackLoc->Parameters.Create.EaLength = SystemEaBuffer != NULL ? EaLength : 0;
-         StackLoc->Flags |= !(ObjectAttributes->Attributes & OBJ_CASE_INSENSITIVE) ? SL_CASE_SENSITIVE: 0;
-         break;
-
-      case CreateFileTypeNamedPipe:
-        StackLoc->MajorFunction = IRP_MJ_CREATE_NAMED_PIPE;
-        StackLoc->Parameters.CreatePipe.Parameters = ExtraCreateParameters;
-        break;
-
-      case CreateFileTypeMailslot:
-        StackLoc->MajorFunction = IRP_MJ_CREATE_MAILSLOT;
-        StackLoc->Parameters.CreateMailslot.Parameters = ExtraCreateParameters;
-        break;
-     }
-
-   /* Set the common data */
-   Irp->Overlay.AllocationSize = SafeAllocationSize;
-   Irp->AssociatedIrp.SystemBuffer = SystemEaBuffer;
-   StackLoc->Parameters.Create.Options = (CreateDisposition << 24) | (CreateOptions & 0x00FFFFFF);
-   StackLoc->Parameters.Create.FileAttributes = FileAttributes;
-   StackLoc->Parameters.Create.ShareAccess = ShareAccess;
-   StackLoc->Parameters.Create.SecurityContext = &SecurityContext;
-
-   /*
-    * Now call the driver and
-    * possibly wait if it can
-    * not complete the request
-    * immediately.
-    */
-   Status = IofCallDriver(FileObject->DeviceObject, Irp );
-   DPRINT("Status :%x\n", Status);
-   
-   if (Status == STATUS_PENDING)
-     {
-       KeWaitForSingleObject(&FileObject->Event,
-                             Executive,
-                             AccessMode,
-                             FALSE,
-                             NULL);
-       Status = IoStatusBlock->Status;
-     }
-   else
-   {
+
+    SeCreateAccessState(&AccessState, &AuxData, FILE_ALL_ACCESS, NULL);
+    SecurityContext.SecurityQos = NULL; /* ?? */
+    SecurityContext.AccessState = &AccessState;
+    SecurityContext.DesiredAccess = DesiredAccess;
+    SecurityContext.FullCreateOptions = CreateOptions;
+
+    KeInitializeEvent(&FileObject->Lock, SynchronizationEvent, TRUE);
+    KeInitializeEvent(&FileObject->Event, NotificationEvent, FALSE);
+
+    Irp = IoAllocateIrp(FileObject->DeviceObject->StackSize, FALSE);
+    if (!Irp)
+    {
+        ZwClose(LocalHandle);
+        return STATUS_UNSUCCESSFUL;
+    }
+
+    /* Now set the IRP data */
+    Irp->Tail.Overlay.OriginalFileObject = FileObject;
+    Irp->RequestorMode = AccessMode;
+    Irp->Flags = IRP_CREATE_OPERATION |
+                 IRP_SYNCHRONOUS_API |
+                 IRP_DEFER_IO_COMPLETION;
+    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
+    Irp->UserEvent = &FileObject->Event;
+    Irp->UserIosb = IoStatusBlock;
+    Irp->MdlAddress = NULL;
+    Irp->PendingReturned = FALSE;
+    Irp->UserEvent = NULL;
+    Irp->Cancel = FALSE;
+    Irp->CancelRoutine = NULL;
+    Irp->Tail.Overlay.AuxiliaryBuffer = NULL;
+
+    StackLoc = (PEXTENDED_IO_STACK_LOCATION)IoGetNextIrpStackLocation(Irp);
+    StackLoc->Control = 0;
+    StackLoc->FileObject = FileObject;
+
+    switch (CreateFileType)
+    {
+        default:
+        case CreateFileTypeNone:
+            StackLoc->MajorFunction = IRP_MJ_CREATE;
+            StackLoc->Flags = Options;
+            StackLoc->Parameters.Create.EaLength = SystemEaBuffer != NULL ? EaLength : 0;
+            StackLoc->Flags |= !(ObjectAttributes->Attributes & OBJ_CASE_INSENSITIVE) ? SL_CASE_SENSITIVE: 0;
+            break;
+
+        case CreateFileTypeNamedPipe:
+            StackLoc->MajorFunction = IRP_MJ_CREATE_NAMED_PIPE;
+            StackLoc->Parameters.CreatePipe.Parameters = ExtraCreateParameters;
+            break;
+
+        case CreateFileTypeMailslot:
+            StackLoc->MajorFunction = IRP_MJ_CREATE_MAILSLOT;
+            StackLoc->Parameters.CreateMailslot.Parameters = ExtraCreateParameters;
+            break;
+    }
+
+    /* Set the common data */
+    Irp->Overlay.AllocationSize = SafeAllocationSize;
+    Irp->AssociatedIrp.SystemBuffer = SystemEaBuffer;
+    StackLoc->Parameters.Create.Options = (CreateDisposition << 24) | (CreateOptions & 0x00FFFFFF);
+    StackLoc->Parameters.Create.FileAttributes = FileAttributes;
+    StackLoc->Parameters.Create.ShareAccess = ShareAccess;
+    StackLoc->Parameters.Create.SecurityContext = &SecurityContext;
+
+    Status = IofCallDriver(FileObject->DeviceObject, Irp );
+    if (Status == STATUS_PENDING)
+    {
+        KeWaitForSingleObject(&FileObject->Event,
+                              Executive,
+                              AccessMode,
+                              FALSE,
+                              NULL);
+        Status = IoStatusBlock->Status;
+    }
+    else
+    {
         /* We'll have to complete it ourselves */
         ASSERT(!Irp->PendingReturned);
         KeRaiseIrql(APC_LEVEL, &OldIrql);
@@ -1144,38 +1039,34 @@
                            (PVOID*)&FileObject,
                            &NormalContext);
         KeLowerIrql(OldIrql);
-   }
-   if (!NT_SUCCESS(Status))
-     {
-       DPRINT("Failing create request with status %x\n", Status);
-       FileObject->DeviceObject = NULL;
-       FileObject->Vpb = NULL;
-       ObDereferenceObject(FileObject);
-     }
-   else
-     {
-       _SEH_TRY
-         {
-           *FileHandle = LocalHandle;
-         }
-       _SEH_HANDLE
-         {
-           Status = _SEH_GetExceptionCode();
-         }
-       _SEH_END;
-     }
-
-   /* cleanup EABuffer if captured */
-   if(AccessMode != KernelMode && SystemEaBuffer != NULL)
-   {
-     ExFreePool(SystemEaBuffer);
-   }
-
-   ASSERT_IRQL(PASSIVE_LEVEL);
-
-   DPRINT("Finished IoCreateFile() (*FileHandle) 0x%p\n", (*FileHandle));
-
-   return Status;
+    }
+
+    if (!NT_SUCCESS(Status))
+    {
+        FileObject->DeviceObject = NULL;
+        FileObject->Vpb = NULL;
+        ObDereferenceObject(FileObject);
+    }
+    else
+    {
+        _SEH_TRY
+        {
+            *FileHandle = LocalHandle;
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+    }
+
+    /* cleanup EABuffer if captured */
+    if (AccessMode != KernelMode && (SystemEaBuffer))
+    {
+        ExFreePool(SystemEaBuffer);
+    }
+
+    return Status;
 }
 
 /*




More information about the Ros-diffs mailing list