wine-staging/patches/mountmgr-DosDevices/0001-mountmgr.sys-Write-usable-device-paths-into-HKLM-SYS.patch

75 lines
3.2 KiB
Diff
Raw Permalink Normal View History

From b98e363f0809d5f5092854eb3ab207a908bf6bd8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 30 Mar 2015 04:01:51 +0200
Subject: [PATCH] mountmgr.sys: Write usable device paths into
HKLM\SYSTEM\MountedDevices.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Based on a patch by Bernhard Übelacker.
---
dlls/mountmgr.sys/device.c | 4 ++--
dlls/mountmgr.sys/mountmgr.c | 11 +++++++++--
dlls/mountmgr.sys/mountmgr.h | 2 +-
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c
index 1ee82e92c97..58db9284ff3 100644
--- a/dlls/mountmgr.sys/device.c
+++ b/dlls/mountmgr.sys/device.c
@@ -1051,8 +1051,8 @@ static NTSTATUS set_volume_info( struct volume *volume, struct dos_drive *drive,
id = disk_device->unix_mount;
id_len = strlen( disk_device->unix_mount ) + 1;
}
- if (volume->mount) set_mount_point_id( volume->mount, id, id_len );
- if (drive && drive->mount) set_mount_point_id( drive->mount, id, id_len );
+ if (volume->mount) set_mount_point_id( volume->mount, id, id_len, -1 );
+ if (drive && drive->mount) set_mount_point_id( drive->mount, id, id_len, drive->drive );
return STATUS_SUCCESS;
}
diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c
index ad3c034fe0f..52bc6536693 100644
--- a/dlls/mountmgr.sys/mountmgr.c
+++ b/dlls/mountmgr.sys/mountmgr.c
@@ -44,14 +44,21 @@ struct mount_point
static struct list mount_points_list = LIST_INIT(mount_points_list);
static HKEY mount_key;
-void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int id_len )
+void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int id_len, int drive )
{
+ WCHAR logicalW[] = {'\\','\\','.','\\','a',':',0};
free( mount->id );
mount->id_len = max( MIN_ID_LEN, id_len );
if ((mount->id = calloc( mount->id_len, 1 )))
{
memcpy( mount->id, id, id_len );
- RegSetValueExW( mount_key, mount->link.Buffer, 0, REG_BINARY, mount->id, mount->id_len );
+ if (drive < 0)
+ RegSetValueExW( mount_key, mount->link.Buffer, 0, REG_BINARY, mount->id, mount->id_len );
+ else
+ {
+ logicalW[4] = 'a' + drive;
+ RegSetValueExW( mount_key, mount->link.Buffer, 0, REG_BINARY, (BYTE*)logicalW, sizeof(logicalW) );
+ }
}
else mount->id_len = 0;
}
diff --git a/dlls/mountmgr.sys/mountmgr.h b/dlls/mountmgr.sys/mountmgr.h
index b1de312dffb..d7b7fad5c76 100644
--- a/dlls/mountmgr.sys/mountmgr.h
+++ b/dlls/mountmgr.sys/mountmgr.h
@@ -108,6 +108,6 @@ extern struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICOD
extern struct mount_point *add_volume_mount_point( DEVICE_OBJECT *device, UNICODE_STRING *device_name,
const GUID *guid );
extern void delete_mount_point( struct mount_point *mount );
-extern void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int id_len );
+extern void set_mount_point_id( struct mount_point *mount, const void *id, unsigned int id_len, int drive );
#endif /* __WINE_MOUNTMGR_H */
--
2.42.0