Erich E. Hoover : mountmgr.sys: Have mountmgr_ioctl return the same status as the IoStatus.

Alexandre Julliard julliard at winehq.org
Fri Feb 5 16:50:48 CST 2021


Module: wine
Branch: master
Commit: d457a986de9d8bb0efa573c57bba98324bbb2b49
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d457a986de9d8bb0efa573c57bba98324bbb2b49

Author: Erich E. Hoover <erich.e.hoover at gmail.com>
Date:   Thu Feb  4 23:00:45 2021 -0700

mountmgr.sys: Have mountmgr_ioctl return the same status as the IoStatus.

Signed-off-by: Erich E. Hoover <erich.e.hoover at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mountmgr.sys/mountmgr.c | 89 +++++++++++++++++++++++---------------------
 1 file changed, 46 insertions(+), 43 deletions(-)

diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c
index 54ba2857e02..9e3dcadb8d7 100644
--- a/dlls/mountmgr.sys/mountmgr.c
+++ b/dlls/mountmgr.sys/mountmgr.c
@@ -973,6 +973,7 @@ static NTSTATUS enumerate_credentials( void *buff, SIZE_T insize, SIZE_T outsize
 static NTSTATUS WINAPI mountmgr_ioctl( DEVICE_OBJECT *device, IRP *irp )
 {
     IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation( irp );
+    NTSTATUS status;
 
     TRACE( "ioctl %x insize %u outsize %u\n",
            irpsp->Parameters.DeviceIoControl.IoControlCode,
@@ -984,109 +985,111 @@ static NTSTATUS WINAPI mountmgr_ioctl( DEVICE_OBJECT *device, IRP *irp )
     case IOCTL_MOUNTMGR_QUERY_POINTS:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(MOUNTMGR_MOUNT_POINT))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = query_mount_points( irp->AssociatedIrp.SystemBuffer,
-                                                     irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                     irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                     &irp->IoStatus );
+        status = query_mount_points( irp->AssociatedIrp.SystemBuffer,
+                                     irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                     irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                     &irp->IoStatus );
         break;
     case IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_unix_drive))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
         irp->IoStatus.Information = 0;
-        irp->IoStatus.u.Status = define_unix_drive( irp->AssociatedIrp.SystemBuffer,
-                                                    irpsp->Parameters.DeviceIoControl.InputBufferLength );
+        status = define_unix_drive( irp->AssociatedIrp.SystemBuffer,
+                                    irpsp->Parameters.DeviceIoControl.InputBufferLength );
         break;
     case IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_unix_drive))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = query_unix_drive( irp->AssociatedIrp.SystemBuffer,
-                                                   irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                   irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                   &irp->IoStatus );
+        status = query_unix_drive( irp->AssociatedIrp.SystemBuffer,
+                                   irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                   irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                   &irp->IoStatus );
         break;
     case IOCTL_MOUNTMGR_QUERY_DHCP_REQUEST_PARAMS:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_dhcp_request_params))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = query_dhcp_request_params( irp->AssociatedIrp.SystemBuffer,
-                                                            irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                            irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                            &irp->IoStatus );
+        status = query_dhcp_request_params( irp->AssociatedIrp.SystemBuffer,
+                                            irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                            irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                            &irp->IoStatus );
         break;
 #ifdef __APPLE__
     case IOCTL_MOUNTMGR_QUERY_SYMBOL_FILE:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength != sizeof(GUID)
             || irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(MOUNTMGR_TARGET_NAME))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        if (TrySubmitThreadpoolCallback( query_symbol_file, irp, NULL )) return STATUS_PENDING;
-        irp->IoStatus.u.Status = STATUS_NO_MEMORY;
+        if (TrySubmitThreadpoolCallback( query_symbol_file, irp, NULL ))
+            return (irp->IoStatus.u.Status = STATUS_PENDING);
+        status = STATUS_NO_MEMORY;
         break;
     case IOCTL_MOUNTMGR_READ_CREDENTIAL:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_credential))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = read_credential( irp->AssociatedIrp.SystemBuffer,
-                                                  irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                  irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                  &irp->IoStatus );
+        status = read_credential( irp->AssociatedIrp.SystemBuffer,
+                                  irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                  irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                  &irp->IoStatus );
         break;
     case IOCTL_MOUNTMGR_WRITE_CREDENTIAL:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_credential))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = write_credential( irp->AssociatedIrp.SystemBuffer,
-                                                   irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                   irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                   &irp->IoStatus );
+        status = write_credential( irp->AssociatedIrp.SystemBuffer,
+                                   irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                   irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                   &irp->IoStatus );
         break;
     case IOCTL_MOUNTMGR_DELETE_CREDENTIAL:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_credential))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = delete_credential( irp->AssociatedIrp.SystemBuffer,
-                                                    irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                    irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                    &irp->IoStatus );
+        status = delete_credential( irp->AssociatedIrp.SystemBuffer,
+                                    irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                    irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                    &irp->IoStatus );
         break;
     case IOCTL_MOUNTMGR_ENUMERATE_CREDENTIALS:
         if (irpsp->Parameters.DeviceIoControl.InputBufferLength < sizeof(struct mountmgr_credential_list))
         {
-            irp->IoStatus.u.Status = STATUS_INVALID_PARAMETER;
+            status = STATUS_INVALID_PARAMETER;
             break;
         }
-        irp->IoStatus.u.Status = enumerate_credentials( irp->AssociatedIrp.SystemBuffer,
-                                                        irpsp->Parameters.DeviceIoControl.InputBufferLength,
-                                                        irpsp->Parameters.DeviceIoControl.OutputBufferLength,
-                                                        &irp->IoStatus );
+        status = enumerate_credentials( irp->AssociatedIrp.SystemBuffer,
+                                        irpsp->Parameters.DeviceIoControl.InputBufferLength,
+                                        irpsp->Parameters.DeviceIoControl.OutputBufferLength,
+                                        &irp->IoStatus );
         break;
 #endif
     default:
         FIXME( "ioctl %x not supported\n", irpsp->Parameters.DeviceIoControl.IoControlCode );
-        irp->IoStatus.u.Status = STATUS_NOT_SUPPORTED;
+        status = STATUS_NOT_SUPPORTED;
         break;
     }
+    irp->IoStatus.u.Status = status;
     IoCompleteRequest( irp, IO_NO_INCREMENT );
-    return STATUS_SUCCESS;
+    return status;
 }
 
 /* main entry point for the mount point manager driver */




More information about the wine-cvs mailing list