From 3fca6cd1ed4bf8416bca5d75bc92e67c607b140c Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 3 May 2017 11:49:05 +0200 Subject: [PATCH] mountmgr: Create symbolic links in DosDevices for serial and parallel ports. Signed-off-by: Alexandre Julliard --- dlls/mountmgr.sys/device.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c index 49bcc90c1c4..1b439d27278 100644 --- a/dlls/mountmgr.sys/device.c +++ b/dlls/mountmgr.sys/device.c @@ -1000,14 +1000,17 @@ static BOOL create_port_device( DRIVER_OBJECT *driver, int n, const char *unix_p { static const WCHAR comW[] = {'C','O','M','%','u',0}; static const WCHAR lptW[] = {'L','P','T','%','u',0}; + static const WCHAR auxW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','A','U','X',0}; + static const WCHAR prnW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','P','R','N',0}; static const WCHAR device_serialW[] = {'\\','D','e','v','i','c','e','\\','S','e','r','i','a','l','%','u',0}; static const WCHAR device_parallelW[] = {'\\','D','e','v','i','c','e','\\','P','a','r','a','l','l','e','l','%','u',0}; + static const WCHAR dosdevices_comW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','C','O','M','%','u',0}; static const WCHAR dosdevices_lptW[] = {'\\','D','o','s','D','e','v','i','c','e','s','\\','L','P','T','%','u',0}; - const WCHAR *dos_name_format, *nt_name_format, *reg_value_format; - WCHAR dos_name[7], reg_value[256], nt_buffer[32]; + const WCHAR *dos_name_format, *nt_name_format, *reg_value_format, *symlink_format, *default_device; + WCHAR dos_name[7], reg_value[256], nt_buffer[32], symlink_buffer[32]; DWORD type, size; char override_path[256]; - UNICODE_STRING nt_name; + UNICODE_STRING nt_name, symlink_name, default_name; DEVICE_OBJECT *dev_obj; NTSTATUS status; @@ -1016,12 +1019,16 @@ static BOOL create_port_device( DRIVER_OBJECT *driver, int n, const char *unix_p dos_name_format = comW; nt_name_format = device_serialW; reg_value_format = comW; + symlink_format = dosdevices_comW; + default_device = auxW; } else { dos_name_format = lptW; nt_name_format = device_parallelW; reg_value_format = dosdevices_lptW; + symlink_format = dosdevices_lptW; + default_device = prnW; } sprintfW( dos_name, dos_name_format, n ); @@ -1052,6 +1059,15 @@ static BOOL create_port_device( DRIVER_OBJECT *driver, int n, const char *unix_p FIXME( "IoCreateDevice %s got %x\n", debugstr_w(nt_name.Buffer), status ); return FALSE; } + sprintfW( symlink_buffer, symlink_format, n ); + RtlInitUnicodeString( &symlink_name, symlink_buffer ); + IoCreateSymbolicLink( &symlink_name, &nt_name ); + if (n == 1) + { + RtlInitUnicodeString( &default_name, default_device ); + IoCreateSymbolicLink( &default_name, &symlink_name ); + } + /* TODO: store information about the Unix device in the NT device */ /* create registry entry */