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