Alexandre Julliard : mountmgr: Create symbolic links in DosDevices for serial and parallel ports.

Alexandre Julliard julliard at winehq.org
Wed May 3 16:06:09 CDT 2017


Module: wine
Branch: master
Commit: 3fca6cd1ed4bf8416bca5d75bc92e67c607b140c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3fca6cd1ed4bf8416bca5d75bc92e67c607b140c

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed May  3 11:49:05 2017 +0200

mountmgr: Create symbolic links in DosDevices for serial and parallel ports.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 49bcc90..1b439d2 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 */




More information about the wine-cvs mailing list