Author: cgutman
Date: Fri Jun 17 00:57:55 2011
New Revision: 52289

URL: http://svn.reactos.org/svn/reactos?rev=52289&view=rev
Log:
[NTOSKRNL]
- Fix a critical bug in IopDeviceFsIoControl which caused all FSCTL requests 
sent via NtFsControlFile and ZwFsControlFile to fail

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=52289&r1=52288&r2=52289&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] Fri Jun 17 00:57:55 
2011
@@ -370,10 +370,21 @@
     StackPtr->MajorFunction = IsDevIoCtl ?
                               IRP_MJ_DEVICE_CONTROL :
                               IRP_MJ_FILE_SYSTEM_CONTROL;
-    StackPtr->MinorFunction = 0;
     StackPtr->Control = 0;
     StackPtr->Flags = 0;
     StackPtr->Parameters.DeviceIoControl.Type3InputBuffer = NULL;
+    
+    /* Check if this is a FS control request */
+    if (StackPtr->MajorFunction == IRP_MJ_FILE_SYSTEM_CONTROL)
+    {
+        /* It is, so we have to set a minor function */
+        StackPtr->MinorFunction = (Irp->RequestorMode == KernelMode) ? 
IRP_MN_KERNEL_CALL : IRP_MN_USER_FS_REQUEST;
+    }
+    else
+    {
+        /* Minor function doesn't matter for regular device control requests */
+        StackPtr->MinorFunction = 0;
+    }
 
     /* Set the IOCTL Data */
     StackPtr->Parameters.DeviceIoControl.IoControlCode = IoControlCode;


Reply via email to