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