[ros-diffs] [ion] 22768: - Fix formatting of some newly added functions before starting heavy work.

ion at svn.reactos.org ion at svn.reactos.org
Sun Jul 2 16:26:26 CEST 2006


Author: ion
Date: Sun Jul  2 18:26:25 2006
New Revision: 22768

URL: http://svn.reactos.org/svn/reactos?rev=22768&view=rev
Log:
- Fix formatting of some newly added functions before starting heavy work.

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

Modified: trunk/reactos/ntoskrnl/io/iomgr/iofunc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/iofunc.c?rev=22768&r1=22767&r2=22768&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/iofunc.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/iofunc.c Sun Jul  2 18:26:25 2006
@@ -405,159 +405,138 @@
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS
+NTAPI
 IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
-			 IN FS_INFORMATION_CLASS FsInformationClass,
-			 IN ULONG Length,
-			 OUT PVOID FsInformation,
-			 OUT PULONG ReturnedLength)
+                         IN FS_INFORMATION_CLASS FsInformationClass,
+                         IN ULONG Length,
+                         OUT PVOID FsInformation,
+                         OUT PULONG ReturnedLength)
 {
-   IO_STATUS_BLOCK IoStatusBlock;
-   PIO_STACK_LOCATION StackPtr;
-   PDEVICE_OBJECT DeviceObject;
-   PIRP Irp;
-   NTSTATUS Status;
-
-   ASSERT(FsInformation != NULL);
-
-   DPRINT("FsInformation %p\n", FsInformation);
-
-   Status = ObReferenceObjectByPointer(FileObject,
-				       FILE_READ_ATTRIBUTES,
-				       IoFileObjectType,
-				       KernelMode);
-   if (!NT_SUCCESS(Status))
-     {
-	return(Status);
-     }
-
-   DeviceObject = FileObject->DeviceObject;
-
-   Irp = IoAllocateIrp(DeviceObject->StackSize,
-		       TRUE);
-   if (Irp == NULL)
-     {
-	ObDereferenceObject(FileObject);
-	return(STATUS_INSUFFICIENT_RESOURCES);
-     }
-
-   /* Trigger FileObject/Event dereferencing */
-   Irp->Tail.Overlay.OriginalFileObject = FileObject;
-   Irp->RequestorMode = KernelMode;
-   Irp->AssociatedIrp.SystemBuffer = FsInformation;
-   KeResetEvent( &FileObject->Event );
-   Irp->UserEvent = &FileObject->Event;
-   Irp->UserIosb = &IoStatusBlock;
-   Irp->Tail.Overlay.Thread = PsGetCurrentThread();
-
-   StackPtr = IoGetNextIrpStackLocation(Irp);
-   StackPtr->MajorFunction = IRP_MJ_QUERY_VOLUME_INFORMATION;
-   StackPtr->MinorFunction = 0;
-   StackPtr->Flags = 0;
-   StackPtr->Control = 0;
-   StackPtr->DeviceObject = DeviceObject;
-   StackPtr->FileObject = FileObject;
-   StackPtr->Parameters.QueryVolume.Length = Length;
-   StackPtr->Parameters.QueryVolume.FsInformationClass =
-	FsInformationClass;
-
-   Status = IoCallDriver(DeviceObject,
-			 Irp);
-   if (Status == STATUS_PENDING)
-     {
-	KeWaitForSingleObject(&FileObject->Event,
-			      UserRequest,
-			      KernelMode,
-			      FALSE,
-			      NULL);
-	Status = IoStatusBlock.Status;
-     }
-   DPRINT("Status %x\n", Status);
-
-   if (ReturnedLength != NULL)
-     {
-	*ReturnedLength = IoStatusBlock.Information;
-     }
-
-   return(Status);
+    IO_STATUS_BLOCK IoStatusBlock;
+    PIO_STACK_LOCATION StackPtr;
+    PDEVICE_OBJECT DeviceObject;
+    PIRP Irp;
+    NTSTATUS Status;
+
+    Status = ObReferenceObjectByPointer(FileObject,
+                                        FILE_READ_ATTRIBUTES,
+                                        IoFileObjectType,
+                                        KernelMode);
+    if (!NT_SUCCESS(Status)) return(Status);
+
+    DeviceObject = FileObject->DeviceObject;
+
+    Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
+    if (!Irp)
+    {
+        ObDereferenceObject(FileObject);
+        return(STATUS_INSUFFICIENT_RESOURCES);
+    }
+
+    /* Trigger FileObject/Event dereferencing */
+    Irp->Tail.Overlay.OriginalFileObject = FileObject;
+    Irp->RequestorMode = KernelMode;
+    Irp->AssociatedIrp.SystemBuffer = FsInformation;
+    KeResetEvent( &FileObject->Event );
+    Irp->UserEvent = &FileObject->Event;
+    Irp->UserIosb = &IoStatusBlock;
+    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
+
+    StackPtr = IoGetNextIrpStackLocation(Irp);
+    StackPtr->MajorFunction = IRP_MJ_QUERY_VOLUME_INFORMATION;
+    StackPtr->MinorFunction = 0;
+    StackPtr->Flags = 0;
+    StackPtr->Control = 0;
+    StackPtr->DeviceObject = DeviceObject;
+    StackPtr->FileObject = FileObject;
+    StackPtr->Parameters.QueryVolume.Length = Length;
+    StackPtr->Parameters.QueryVolume.FsInformationClass =
+        FsInformationClass;
+
+    Status = IoCallDriver(DeviceObject, Irp);
+    if (Status == STATUS_PENDING)
+    {
+        KeWaitForSingleObject(&FileObject->Event,
+                              UserRequest,
+                              KernelMode,
+                              FALSE,
+                              NULL);
+        Status = IoStatusBlock.Status;
+    }
+
+    if (ReturnedLength) *ReturnedLength = IoStatusBlock.Information;
+    return Status;
 }
 
 /*
  * @unimplemented
  */
-NTSTATUS STDCALL
+NTSTATUS
+NTAPI
 IoSetInformation(IN PFILE_OBJECT FileObject,
-		 IN FILE_INFORMATION_CLASS FileInformationClass,
-		 IN ULONG Length,
-		 IN PVOID FileInformation)
+                 IN FILE_INFORMATION_CLASS FileInformationClass,
+                 IN ULONG Length,
+                 IN PVOID FileInformation)
 {
-   IO_STATUS_BLOCK IoStatusBlock;
-   PIRP Irp;
-   PDEVICE_OBJECT DeviceObject;
-   PIO_STACK_LOCATION StackPtr;
-   NTSTATUS Status;
-
-   ASSERT(FileInformation != NULL);
-
-   if (FileInformationClass == FileCompletionInformation)
-   {
-      return STATUS_NOT_IMPLEMENTED;
-   }
-
-
-
-   Status = ObReferenceObjectByPointer(FileObject,
-				       0, /* FIXME - depends on the information class */
-				       IoFileObjectType,
-				       KernelMode);
-   if (!NT_SUCCESS(Status))
-   {
-      return(Status);
-   }
-
-   DPRINT("FileObject 0x%p\n", FileObject);
-
-   DeviceObject = FileObject->DeviceObject;
-
-   Irp = IoAllocateIrp(DeviceObject->StackSize,
-		       TRUE);
-   if (Irp == NULL)
-   {
-      ObDereferenceObject(FileObject);
-      return STATUS_INSUFFICIENT_RESOURCES;
-   }
-
-   /* Trigger FileObject/Event dereferencing */
-   Irp->Tail.Overlay.OriginalFileObject = FileObject;
-   Irp->RequestorMode = KernelMode;
-   Irp->AssociatedIrp.SystemBuffer = FileInformation;
-   Irp->UserIosb = &IoStatusBlock;
-   Irp->UserEvent = &FileObject->Event;
-   Irp->Tail.Overlay.Thread = PsGetCurrentThread();
-   KeResetEvent( &FileObject->Event );
-
-   StackPtr = IoGetNextIrpStackLocation(Irp);
-   StackPtr->MajorFunction = IRP_MJ_SET_INFORMATION;
-   StackPtr->MinorFunction = 0;
-   StackPtr->Flags = 0;
-   StackPtr->Control = 0;
-   StackPtr->DeviceObject = DeviceObject;
-   StackPtr->FileObject = FileObject;
-   StackPtr->Parameters.SetFile.FileInformationClass = FileInformationClass;
-   StackPtr->Parameters.SetFile.Length = Length;
-
-   Status = IoCallDriver(FileObject->DeviceObject, Irp);
-   if (Status==STATUS_PENDING)
-   {
-      KeWaitForSingleObject(&FileObject->Event,
-			    Executive,
-			    KernelMode,
-			    FileObject->Flags & FO_ALERTABLE_IO,
-			    NULL);
-      Status = IoStatusBlock.Status;
-   }
-
-   return Status;
+    IO_STATUS_BLOCK IoStatusBlock;
+    PIRP Irp;
+    PDEVICE_OBJECT DeviceObject;
+    PIO_STACK_LOCATION StackPtr;
+    NTSTATUS Status;
+
+    if (FileInformationClass == FileCompletionInformation)
+    {
+        return STATUS_NOT_IMPLEMENTED;
+    }
+
+    Status = ObReferenceObjectByPointer(FileObject,
+                                        0, /* FIXME - depends on the information class */
+                                        IoFileObjectType,
+                                        KernelMode);
+    if (!NT_SUCCESS(Status)) return(Status);
+
+
+    DeviceObject = FileObject->DeviceObject;
+
+    Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
+    if (!Irp)
+    {
+        ObDereferenceObject(FileObject);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    /* Trigger FileObject/Event dereferencing */
+    Irp->Tail.Overlay.OriginalFileObject = FileObject;
+    Irp->RequestorMode = KernelMode;
+    Irp->AssociatedIrp.SystemBuffer = FileInformation;
+    Irp->UserIosb = &IoStatusBlock;
+    Irp->UserEvent = &FileObject->Event;
+    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
+    KeResetEvent( &FileObject->Event );
+
+    StackPtr = IoGetNextIrpStackLocation(Irp);
+    StackPtr->MajorFunction = IRP_MJ_SET_INFORMATION;
+    StackPtr->MinorFunction = 0;
+    StackPtr->Flags = 0;
+    StackPtr->Control = 0;
+    StackPtr->DeviceObject = DeviceObject;
+    StackPtr->FileObject = FileObject;
+    StackPtr->Parameters.SetFile.FileInformationClass = FileInformationClass;
+    StackPtr->Parameters.SetFile.Length = Length;
+
+    Status = IoCallDriver(FileObject->DeviceObject, Irp);
+    if (Status==STATUS_PENDING)
+    {
+        KeWaitForSingleObject(&FileObject->Event,
+                              Executive,
+                              KernelMode,
+                              FileObject->Flags & FO_ALERTABLE_IO,
+                              NULL);
+        Status = IoStatusBlock.Status;
+    }
+
+    return Status;
 }
 
 /* NATIVE SERVICES ***********************************************************/
@@ -1324,7 +1303,6 @@
         }
     }
 
-
     return Status;
 
 Cleanup:
@@ -1767,7 +1745,7 @@
                   IN PULONG Key OPTIONAL)
 {
     UNIMPLEMENTED;
-    return(STATUS_NOT_IMPLEMENTED);
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 /*
@@ -2281,15 +2259,15 @@
  */
 NTSTATUS
 NTAPI
-NtWriteFile (IN HANDLE FileHandle,
-             IN HANDLE Event OPTIONAL,
-             IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
-             IN PVOID ApcContext OPTIONAL,
-             OUT PIO_STATUS_BLOCK IoStatusBlock,
-             IN PVOID Buffer,
-             IN ULONG Length,
-             IN PLARGE_INTEGER ByteOffset OPTIONAL,
-             IN PULONG Key OPTIONAL)
+NtWriteFile(IN HANDLE FileHandle,
+            IN HANDLE Event OPTIONAL,
+            IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+            IN PVOID ApcContext OPTIONAL,
+            OUT PIO_STATUS_BLOCK IoStatusBlock,
+            IN PVOID Buffer,
+            IN ULONG Length,
+            IN PLARGE_INTEGER ByteOffset OPTIONAL,
+            IN PULONG Key OPTIONAL)
 {
     OBJECT_HANDLE_INFORMATION ObjectHandleInfo;
     NTSTATUS Status = STATUS_SUCCESS;
@@ -2322,7 +2300,7 @@
         DesiredAccess |= FILE_APPEND_DATA;
 
     /* Validate User-Mode Buffers */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* check if the handle has either FILE_WRITE_DATA or FILE_APPEND_DATA was
            granted. */
@@ -2494,74 +2472,44 @@
                   OUT PIO_STATUS_BLOCK UserIoStatusBlock,
                   IN FILE_SEGMENT_ELEMENT BufferDescription [],
                   IN ULONG BufferLength,
-                  IN PLARGE_INTEGER  ByteOffset,
+                  IN PLARGE_INTEGER ByteOffset,
                   IN PULONG Key OPTIONAL)
 {
     UNIMPLEMENTED;
-    return(STATUS_NOT_IMPLEMENTED);
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 /*
- * FUNCTION: Queries the volume information
- * ARGUMENTS:
- *	  FileHandle  = Handle to a file object on the target volume
- *	  ReturnLength = DataWritten
- *	  FsInformation = Caller should supply storage for the information
- *	                  structure.
- *	  Length = Size of the information structure
- *	  FsInformationClass = Index to a information structure
- *
- *		FileFsVolumeInformation		FILE_FS_VOLUME_INFORMATION
- *		FileFsLabelInformation		FILE_FS_LABEL_INFORMATION
- *		FileFsSizeInformation		FILE_FS_SIZE_INFORMATION
- *		FileFsDeviceInformation		FILE_FS_DEVICE_INFORMATION
- *		FileFsAttributeInformation	FILE_FS_ATTRIBUTE_INFORMATION
- *		FileFsControlInformation
- *		FileFsQuotaQueryInformation	--
- *		FileFsQuotaSetInformation	--
- *		FileFsMaximumInformation
- *
- * RETURNS: Status
- *
  * @implemented
  */
-
-NTSTATUS STDCALL
+NTSTATUS
+NTAPI
 NtQueryVolumeInformationFile(IN HANDLE FileHandle,
-			     OUT PIO_STATUS_BLOCK IoStatusBlock,
-			     OUT PVOID FsInformation,
-			     IN ULONG Length,
-			     IN FS_INFORMATION_CLASS FsInformationClass)
+                             OUT PIO_STATUS_BLOCK IoStatusBlock,
+                             OUT PVOID FsInformation,
+                             IN ULONG Length,
+                             IN FS_INFORMATION_CLASS FsInformationClass)
 {
-   PFILE_OBJECT FileObject;
-   PDEVICE_OBJECT DeviceObject;
-   PIRP Irp;
-   NTSTATUS Status = STATUS_SUCCESS;
-   PIO_STACK_LOCATION StackPtr;
-   PVOID SystemBuffer;
-   KPROCESSOR_MODE PreviousMode;
-
-   DPRINT("FsInformation %p\n", FsInformation);
-
-   PreviousMode = ExGetPreviousMode();
-   
-   if (PreviousMode != KernelMode)
-   {
+    PFILE_OBJECT FileObject;
+    PDEVICE_OBJECT DeviceObject;
+    PIRP Irp;
+    NTSTATUS Status = STATUS_SUCCESS;
+    PIO_STACK_LOCATION StackPtr;
+    PVOID SystemBuffer;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+
+    if (PreviousMode != KernelMode)
+    {
         _SEH_TRY
         {
-            if (IoStatusBlock != NULL)
+            if (IoStatusBlock)
             {
                 ProbeForWrite(IoStatusBlock,
                               sizeof(IO_STATUS_BLOCK),
                               sizeof(ULONG));
             }
 
-            if (Length != 0)
-            {
-                ProbeForWrite(FsInformation,
-                              Length,
-                              1);
-            }
+            if (Length) ProbeForWrite(FsInformation, Length, 1);
         }
         _SEH_HANDLE
         {
@@ -2573,256 +2521,215 @@
         {
             return Status;
         }
-   }
-   else
-   {
-       ASSERT(IoStatusBlock != NULL);
-       ASSERT(FsInformation != NULL);
-   }
-
-   Status = ObReferenceObjectByHandle(FileHandle,
-				      0, /* FIXME - depends on the information class! */
-				      IoFileObjectType,
-				      PreviousMode,
-				      (PVOID*)&FileObject,
-				      NULL);
-   if (!NT_SUCCESS(Status))
-     {
-	return(Status);
+    }
+
+    Status = ObReferenceObjectByHandle(FileHandle,
+                                       0, /* FIXME - depends on the information class! */
+                                       IoFileObjectType,
+                                       PreviousMode,
+                                       (PVOID*)&FileObject,
+                                       NULL);
+    if (!NT_SUCCESS(Status)) return Status;
+
+    DeviceObject = FileObject->DeviceObject;
+
+    Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
+    if (!Irp)
+    {
+        ObDereferenceObject(FileObject);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, Length, TAG_SYSB);
+    if (!SystemBuffer)
+    {
+        IoFreeIrp(Irp);
+        ObDereferenceObject(FileObject);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    /* Trigger FileObject/Event dereferencing */
+    Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
+    Irp->RequestorMode = PreviousMode;
+    Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
+    KeResetEvent( &FileObject->Event );
+    Irp->UserEvent = &FileObject->Event;
+    Irp->UserIosb = IoStatusBlock;
+    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
+
+    StackPtr = IoGetNextIrpStackLocation(Irp);
+    StackPtr->MajorFunction = IRP_MJ_QUERY_VOLUME_INFORMATION;
+    StackPtr->MinorFunction = 0;
+    StackPtr->Flags = 0;
+    StackPtr->Control = 0;
+    StackPtr->DeviceObject = DeviceObject;
+    StackPtr->FileObject = FileObject;
+    StackPtr->Parameters.QueryVolume.Length = Length;
+    StackPtr->Parameters.QueryVolume.FsInformationClass =
+    FsInformationClass;
+
+    Status = IoCallDriver(DeviceObject, Irp);
+    if (Status == STATUS_PENDING)
+    {
+        KeWaitForSingleObject(&FileObject->Event,
+                              UserRequest,
+                              PreviousMode,
+                              FALSE,
+                              NULL);
+        Status = IoStatusBlock->Status;
      }
 
-   DeviceObject = FileObject->DeviceObject;
-
-   Irp = IoAllocateIrp(DeviceObject->StackSize,
-		       TRUE);
-   if (Irp == NULL)
-     {
-	ObDereferenceObject(FileObject);
-	return(STATUS_INSUFFICIENT_RESOURCES);
-     }
-
-   SystemBuffer = ExAllocatePoolWithTag(NonPagedPool,
-					Length,
-					TAG_SYSB);
-   if (SystemBuffer == NULL)
-     {
-	IoFreeIrp(Irp);
-	ObDereferenceObject(FileObject);
-	return(STATUS_INSUFFICIENT_RESOURCES);
-     }
-
-   /* Trigger FileObject/Event dereferencing */
-   Irp->Tail.Overlay.OriginalFileObject = FileObject;
-
-   Irp->RequestorMode = PreviousMode;
-   Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
-   KeResetEvent( &FileObject->Event );
-   Irp->UserEvent = &FileObject->Event;
-   Irp->UserIosb = IoStatusBlock;
-   Irp->Tail.Overlay.Thread = PsGetCurrentThread();
-
-   StackPtr = IoGetNextIrpStackLocation(Irp);
-   StackPtr->MajorFunction = IRP_MJ_QUERY_VOLUME_INFORMATION;
-   StackPtr->MinorFunction = 0;
-   StackPtr->Flags = 0;
-   StackPtr->Control = 0;
-   StackPtr->DeviceObject = DeviceObject;
-   StackPtr->FileObject = FileObject;
-   StackPtr->Parameters.QueryVolume.Length = Length;
-   StackPtr->Parameters.QueryVolume.FsInformationClass =
-	FsInformationClass;
-
-   Status = IoCallDriver(DeviceObject,
-			 Irp);
-   if (Status == STATUS_PENDING)
-     {
-	KeWaitForSingleObject(&FileObject->Event,
-			      UserRequest,
-			      PreviousMode,
-			      FALSE,
-			      NULL);
-	Status = IoStatusBlock->Status;
-     }
-   DPRINT("Status %x\n", Status);
-
-   if (NT_SUCCESS(Status))
-     {
+    if (NT_SUCCESS(Status))
+        {
         _SEH_TRY
         {
-            DPRINT("Information %lu\n", IoStatusBlock->Information);
             RtlCopyMemory(FsInformation,
                           SystemBuffer,
                           IoStatusBlock->Information);
-	}
-	_SEH_HANDLE
-	{
+        }
+        _SEH_HANDLE
+        {
             Status = _SEH_GetExceptionCode();
-	}
+        }
         _SEH_END;
      }
 
-   ExFreePool(SystemBuffer);
-
-   return(Status);
+    ExFreePool(SystemBuffer);
+    return Status;
 }
 
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS
+NTAPI
 NtSetVolumeInformationFile(IN HANDLE FileHandle,
-			   OUT PIO_STATUS_BLOCK IoStatusBlock,
-			   IN PVOID FsInformation,
-			   IN ULONG Length,
-			   IN FS_INFORMATION_CLASS FsInformationClass)
+                           OUT PIO_STATUS_BLOCK IoStatusBlock,
+                           IN PVOID FsInformation,
+                           IN ULONG Length,
+                           IN FS_INFORMATION_CLASS FsInformationClass)
 {
-   PFILE_OBJECT FileObject;
-   PDEVICE_OBJECT DeviceObject;
-   PIRP Irp;
-   NTSTATUS Status;
-   PIO_STACK_LOCATION StackPtr;
-   PVOID SystemBuffer;
-   KPROCESSOR_MODE PreviousMode;
-
-   PreviousMode = ExGetPreviousMode();
-   
-   if (PreviousMode != KernelMode)
-   {
-      Status = STATUS_SUCCESS;
-      _SEH_TRY
-      {
-         if (IoStatusBlock != NULL)
-         {
-            ProbeForWrite(IoStatusBlock,
-                          sizeof(IO_STATUS_BLOCK),
-                          sizeof(ULONG));
-         }
-
-         if (Length != 0)
-         {
-            ProbeForRead(FsInformation,
-                         Length,
-                         1);
-         }
-      }
-      _SEH_HANDLE
-      {
-         Status = _SEH_GetExceptionCode();
-      }
-      _SEH_END;
-
-      if (!NT_SUCCESS(Status))
-      {
-         return Status;
-      }
-   }
-   else
-   {
-      ASSERT(IoStatusBlock != NULL);
-      ASSERT(FsInformation != NULL);
-   }
-
-   Status = ObReferenceObjectByHandle(FileHandle,
-				      FILE_WRITE_ATTRIBUTES,
-				      NULL,
-				      PreviousMode,
-				      (PVOID*)&FileObject,
-				      NULL);
-   if (Status != STATUS_SUCCESS)
-     {
-	return(Status);
-     }
-
-   DeviceObject = FileObject->DeviceObject;
-
-   Irp = IoAllocateIrp(DeviceObject->StackSize,TRUE);
-   if (Irp == NULL)
-     {
-	ObDereferenceObject(FileObject);
-	return(STATUS_INSUFFICIENT_RESOURCES);
-     }
-
-   SystemBuffer = ExAllocatePoolWithTag(NonPagedPool,
-					Length,
-					TAG_SYSB);
-   if (SystemBuffer == NULL)
-     {
+    PFILE_OBJECT FileObject;
+    PDEVICE_OBJECT DeviceObject;
+    PIRP Irp;
+    NTSTATUS Status = STATUS_SUCCESS;
+    PIO_STACK_LOCATION StackPtr;
+    PVOID SystemBuffer;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+
+    if (PreviousMode != KernelMode)
+    {
+        _SEH_TRY
+        {
+            if (IoStatusBlock)
+            {
+                ProbeForWrite(IoStatusBlock,
+                              sizeof(IO_STATUS_BLOCK),
+                              sizeof(ULONG));
+            }
+
+            if (Length) ProbeForRead(FsInformation, Length, 1);
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+
+        if (!NT_SUCCESS(Status)) return Status;
+    }
+
+    Status = ObReferenceObjectByHandle(FileHandle,
+                                       FILE_WRITE_ATTRIBUTES,
+                                       NULL,
+                                       PreviousMode,
+                                       (PVOID*)&FileObject,
+                                       NULL);
+    if (Status != STATUS_SUCCESS) return Status;
+
+    DeviceObject = FileObject->DeviceObject;
+
+    Irp = IoAllocateIrp(DeviceObject->StackSize,TRUE);
+    if (!Irp)
+    {
+        ObDereferenceObject(FileObject);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, Length, TAG_SYSB);
+    if (!SystemBuffer)
+    {
         Status = STATUS_INSUFFICIENT_RESOURCES;
         goto failfreeirp;
-     }
-
-   if (PreviousMode != KernelMode)
-   {
-      _SEH_TRY
-      {
-         /* no need to probe again */
-         RtlCopyMemory(SystemBuffer,
-                       FsInformation,
-                       Length);
-      }
-      _SEH_HANDLE
-      {
-         Status = _SEH_GetExceptionCode();
-      }
-      _SEH_END;
-
-      if (!NT_SUCCESS(Status))
-      {
-         ExFreePoolWithTag(SystemBuffer,
-                           TAG_SYSB);
+    }
+
+    if (PreviousMode != KernelMode)
+    {
+        _SEH_TRY
+        {
+            /* no need to probe again */
+            RtlCopyMemory(SystemBuffer, FsInformation, Length);
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+
+        if (!NT_SUCCESS(Status))
+        {
+            ExFreePoolWithTag(SystemBuffer, TAG_SYSB);
 failfreeirp:
-         IoFreeIrp(Irp);
-         ObDereferenceObject(FileObject);
-         return Status;
-      }
-   }
-   else
-   {
-      RtlCopyMemory(SystemBuffer,
-                    FsInformation,
-                    Length);
-   }
-
-   /* Trigger FileObject/Event dereferencing */
-   Irp->Tail.Overlay.OriginalFileObject = FileObject;
-   Irp->RequestorMode = PreviousMode;
-   Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
-   KeResetEvent( &FileObject->Event );
-   Irp->UserEvent = &FileObject->Event;
-   Irp->UserIosb = IoStatusBlock;
-   Irp->Tail.Overlay.Thread = PsGetCurrentThread();
-
-   StackPtr = IoGetNextIrpStackLocation(Irp);
-   StackPtr->MajorFunction = IRP_MJ_SET_VOLUME_INFORMATION;
-   StackPtr->MinorFunction = 0;
-   StackPtr->Flags = 0;
-   StackPtr->Control = 0;
-   StackPtr->DeviceObject = DeviceObject;
-   StackPtr->FileObject = FileObject;
-   StackPtr->Parameters.SetVolume.Length = Length;
-   StackPtr->Parameters.SetVolume.FsInformationClass =
-	FsInformationClass;
-
-   Status = IoCallDriver(DeviceObject,Irp);
-   if (Status == STATUS_PENDING)
-     {
-	KeWaitForSingleObject(&FileObject->Event,
-			      UserRequest,
-			      PreviousMode,
-			      FALSE,
-			      NULL);
+            IoFreeIrp(Irp);
+            ObDereferenceObject(FileObject);
+            return Status;
+        }
+    }
+    else
+    {
+        RtlCopyMemory(SystemBuffer, FsInformation, Length);
+    }
+
+    /* Trigger FileObject/Event dereferencing */
+    Irp->Tail.Overlay.OriginalFileObject = FileObject;
+    Irp->RequestorMode = PreviousMode;
+    Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
+    KeResetEvent( &FileObject->Event );
+    Irp->UserEvent = &FileObject->Event;
+    Irp->UserIosb = IoStatusBlock;
+    Irp->Tail.Overlay.Thread = PsGetCurrentThread();
+
+    StackPtr = IoGetNextIrpStackLocation(Irp);
+    StackPtr->MajorFunction = IRP_MJ_SET_VOLUME_INFORMATION;
+    StackPtr->MinorFunction = 0;
+    StackPtr->Flags = 0;
+    StackPtr->Control = 0;
+    StackPtr->DeviceObject = DeviceObject;
+    StackPtr->FileObject = FileObject;
+    StackPtr->Parameters.SetVolume.Length = Length;
+    StackPtr->Parameters.SetVolume.FsInformationClass =
+        FsInformationClass;
+
+    Status = IoCallDriver(DeviceObject,Irp);
+    if (Status == STATUS_PENDING)
+    {
+        KeWaitForSingleObject(&FileObject->Event,
+                              UserRequest,
+                              PreviousMode,
+                              FALSE,
+                              NULL);
         _SEH_TRY
         {
-           Status = IoStatusBlock->Status;
+            Status = IoStatusBlock->Status;
         }
         _SEH_HANDLE
         {
             Status = _SEH_GetExceptionCode();
         }
         _SEH_END;
-     }
-
-   ExFreePool(SystemBuffer);
-
-   return(Status);
+    }
+
+    ExFreePool(SystemBuffer);
+    return Status;
 }




More information about the Ros-diffs mailing list