Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
84396c2e
Commit
84396c2e
authored
Jul 20, 2009
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mountmgr: Add support for setting the drive UUID instead of having it always hardcoded.
parent
bc8dce20
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
23 additions
and
14 deletions
+23
-14
device.c
dlls/mountmgr.sys/device.c
+14
-2
diskarb.c
dlls/mountmgr.sys/diskarb.c
+1
-1
hal.c
dlls/mountmgr.sys/hal.c
+1
-1
mountmgr.c
dlls/mountmgr.sys/mountmgr.c
+5
-8
mountmgr.h
dlls/mountmgr.sys/mountmgr.h
+2
-2
No files found.
dlls/mountmgr.sys/device.c
View file @
84396c2e
...
@@ -71,6 +71,7 @@ struct volume
...
@@ -71,6 +71,7 @@ struct volume
struct
list
entry
;
/* entry in volumes list */
struct
list
entry
;
/* entry in volumes list */
struct
disk_device
*
device
;
/* disk device */
struct
disk_device
*
device
;
/* disk device */
char
*
udi
;
/* unique identifier for dynamic volumes */
char
*
udi
;
/* unique identifier for dynamic volumes */
GUID
guid
;
/* volume uuid */
struct
mount_point
*
mount
;
/* Volume{xxx} mount point */
struct
mount_point
*
mount
;
/* Volume{xxx} mount point */
};
};
...
@@ -109,6 +110,14 @@ static char *strdupA( const char *str )
...
@@ -109,6 +110,14 @@ static char *strdupA( const char *str )
return
ret
;
return
ret
;
}
}
static
const
GUID
*
get_default_uuid
(
int
letter
)
{
static
GUID
guid
;
guid
.
Data4
[
7
]
=
'A'
+
letter
;
return
&
guid
;
}
/* read a Unix symlink; returned buffer must be freed by caller */
/* read a Unix symlink; returned buffer must be freed by caller */
static
char
*
read_symlink
(
const
char
*
path
)
static
char
*
read_symlink
(
const
char
*
path
)
{
{
...
@@ -358,7 +367,7 @@ static void set_drive_letter( struct dos_drive *drive, int letter )
...
@@ -358,7 +367,7 @@ static void set_drive_letter( struct dos_drive *drive, int letter )
id_len
=
strlen
(
device
->
unix_mount
)
+
1
;
id_len
=
strlen
(
device
->
unix_mount
)
+
1
;
}
}
drive
->
dosdev
=
add_dosdev_mount_point
(
device
->
dev_obj
,
&
device
->
name
,
letter
,
id
,
id_len
);
drive
->
dosdev
=
add_dosdev_mount_point
(
device
->
dev_obj
,
&
device
->
name
,
letter
,
id
,
id_len
);
volume
->
mount
=
add_volume_mount_point
(
device
->
dev_obj
,
&
device
->
name
,
letter
,
id
,
id_len
);
volume
->
mount
=
add_volume_mount_point
(
device
->
dev_obj
,
&
device
->
name
,
&
volume
->
guid
,
id
,
id_len
);
}
}
static
inline
int
is_valid_device
(
struct
stat
*
st
)
static
inline
int
is_valid_device
(
struct
stat
*
st
)
...
@@ -528,6 +537,7 @@ static void create_drive_devices(void)
...
@@ -528,6 +537,7 @@ static void create_drive_devices(void)
{
{
drive
->
volume
->
device
->
unix_mount
=
link
;
drive
->
volume
->
device
->
unix_mount
=
link
;
drive
->
volume
->
device
->
unix_device
=
device
;
drive
->
volume
->
device
->
unix_device
=
device
;
drive
->
volume
->
guid
=
*
get_default_uuid
(
i
);
set_drive_letter
(
drive
,
i
);
set_drive_letter
(
drive
,
i
);
}
}
else
else
...
@@ -542,7 +552,7 @@ static void create_drive_devices(void)
...
@@ -542,7 +552,7 @@ static void create_drive_devices(void)
/* create a new dos drive */
/* create a new dos drive */
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
)
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
)
{
{
struct
dos_drive
*
drive
,
*
next
;
struct
dos_drive
*
drive
,
*
next
;
...
@@ -575,6 +585,8 @@ NTSTATUS add_dos_device( int letter, const char *udi, const char *device,
...
@@ -575,6 +585,8 @@ NTSTATUS add_dos_device( int letter, const char *udi, const char *device,
if
(
create_dos_device
(
udi
,
type
,
&
drive
))
return
STATUS_NO_MEMORY
;
if
(
create_dos_device
(
udi
,
type
,
&
drive
))
return
STATUS_NO_MEMORY
;
found:
found:
if
(
!
guid
)
guid
=
get_default_uuid
(
letter
);
drive
->
volume
->
guid
=
*
guid
;
RtlFreeHeap
(
GetProcessHeap
(),
0
,
drive
->
volume
->
device
->
unix_device
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
drive
->
volume
->
device
->
unix_device
);
drive
->
volume
->
device
->
unix_device
=
strdupA
(
device
);
drive
->
volume
->
device
->
unix_device
=
strdupA
(
device
);
set_drive_letter
(
drive
,
letter
);
set_drive_letter
(
drive
,
letter
);
...
...
dlls/mountmgr.sys/diskarb.c
View file @
84396c2e
...
@@ -69,7 +69,7 @@ static void appeared_callback( DADiskRef disk, void *context )
...
@@ -69,7 +69,7 @@ static void appeared_callback( DADiskRef disk, void *context )
TRACE
(
"got mount notification for '%s' on '%s'
\n
"
,
device
,
mount_point
);
TRACE
(
"got mount notification for '%s' on '%s'
\n
"
,
device
,
mount_point
);
add_dos_device
(
-
1
,
device
,
device
,
mount_point
,
type
);
add_dos_device
(
-
1
,
device
,
device
,
mount_point
,
type
,
NULL
);
done:
done:
CFRelease
(
dict
);
CFRelease
(
dict
);
}
}
...
...
dlls/mountmgr.sys/hal.c
View file @
84396c2e
...
@@ -136,7 +136,7 @@ static void new_device( LibHalContext *ctx, const char *udi )
...
@@ -136,7 +136,7 @@ static void new_device( LibHalContext *ctx, const char *udi )
else
if
(
type
&&
!
strcmp
(
type
,
"floppy"
))
drive_type
=
DEVICE_FLOPPY
;
else
if
(
type
&&
!
strcmp
(
type
,
"floppy"
))
drive_type
=
DEVICE_FLOPPY
;
else
drive_type
=
DEVICE_UNKNOWN
;
else
drive_type
=
DEVICE_UNKNOWN
;
add_dos_device
(
-
1
,
udi
,
device
,
mount_point
,
drive_type
);
add_dos_device
(
-
1
,
udi
,
device
,
mount_point
,
drive_type
,
NULL
);
/* add property watch for mount point */
/* add property watch for mount point */
p_libhal_device_add_property_watch
(
ctx
,
udi
,
&
error
);
p_libhal_device_add_property_watch
(
ctx
,
udi
,
&
error
);
...
...
dlls/mountmgr.sys/mountmgr.c
View file @
84396c2e
...
@@ -103,20 +103,17 @@ struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICODE_STRIN
...
@@ -103,20 +103,17 @@ struct mount_point *add_dosdev_mount_point( DEVICE_OBJECT *device, UNICODE_STRIN
/* create the Volume mount point symlink for a new device */
/* create the Volume mount point symlink for a new device */
struct
mount_point
*
add_volume_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
struct
mount_point
*
add_volume_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
int
drive
,
const
void
*
id
,
unsigned
int
id_len
)
const
GUID
*
guid
,
const
void
*
id
,
unsigned
int
id_len
)
{
{
static
const
WCHAR
volumeW
[]
=
{
'\\'
,
'?'
,
'?'
,
'\\'
,
'V'
,
'o'
,
'l'
,
'u'
,
'm'
,
'e'
,
'{'
,
static
const
WCHAR
volumeW
[]
=
{
'\\'
,
'?'
,
'?'
,
'\\'
,
'V'
,
'o'
,
'l'
,
'u'
,
'm'
,
'e'
,
'{'
,
'%'
,
'0'
,
'8'
,
'x'
,
'-'
,
'%'
,
'0'
,
'4'
,
'x'
,
'-'
,
'%'
,
'0'
,
'4'
,
'x'
,
'-'
,
'%'
,
'0'
,
'8'
,
'x'
,
'-'
,
'%'
,
'0'
,
'4'
,
'x'
,
'-'
,
'%'
,
'0'
,
'4'
,
'x'
,
'-'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'-'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'-'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'}'
,
0
};
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'%'
,
'0'
,
'2'
,
'x'
,
'}'
,
0
};
WCHAR
link
[
sizeof
(
volumeW
)];
WCHAR
link
[
sizeof
(
volumeW
)];
GUID
guid
;
memset
(
&
guid
,
0
,
sizeof
(
guid
)
);
/* FIXME */
sprintfW
(
link
,
volumeW
,
guid
->
Data1
,
guid
->
Data2
,
guid
->
Data3
,
guid
.
Data4
[
7
]
=
'A'
+
drive
;
guid
->
Data4
[
0
],
guid
->
Data4
[
1
],
guid
->
Data4
[
2
],
guid
->
Data4
[
3
],
sprintfW
(
link
,
volumeW
,
guid
.
Data1
,
guid
.
Data2
,
guid
.
Data3
,
guid
->
Data4
[
4
],
guid
->
Data4
[
5
],
guid
->
Data4
[
6
],
guid
->
Data4
[
7
]);
guid
.
Data4
[
0
],
guid
.
Data4
[
1
],
guid
.
Data4
[
2
],
guid
.
Data4
[
3
],
guid
.
Data4
[
4
],
guid
.
Data4
[
5
],
guid
.
Data4
[
6
],
guid
.
Data4
[
7
]);
return
add_mount_point
(
device
,
device_name
,
link
,
id
,
id_len
);
return
add_mount_point
(
device
,
device_name
,
link
,
id
,
id_len
);
}
}
...
@@ -266,7 +263,7 @@ static NTSTATUS define_unix_drive( const void *in_buff, SIZE_T insize )
...
@@ -266,7 +263,7 @@ static NTSTATUS define_unix_drive( const void *in_buff, SIZE_T insize )
case
DRIVE_RAMDISK
:
type
=
DEVICE_RAMDISK
;
break
;
case
DRIVE_RAMDISK
:
type
=
DEVICE_RAMDISK
;
break
;
case
DRIVE_FIXED
:
type
=
DEVICE_HARDDISK_VOL
;
break
;
case
DRIVE_FIXED
:
type
=
DEVICE_HARDDISK_VOL
;
break
;
}
}
return
add_dos_device
(
letter
-
'a'
,
NULL
,
device
,
mount_point
,
type
);
return
add_dos_device
(
letter
-
'a'
,
NULL
,
device
,
mount_point
,
type
,
NULL
);
}
}
else
else
{
{
...
...
dlls/mountmgr.sys/mountmgr.h
View file @
84396c2e
...
@@ -52,7 +52,7 @@ enum device_type
...
@@ -52,7 +52,7 @@ enum device_type
};
};
extern
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
extern
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
);
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
);
extern
NTSTATUS
remove_dos_device
(
int
letter
,
const
char
*
udi
);
extern
NTSTATUS
remove_dos_device
(
int
letter
,
const
char
*
udi
);
extern
NTSTATUS
query_dos_device
(
int
letter
,
enum
device_type
*
type
,
extern
NTSTATUS
query_dos_device
(
int
letter
,
enum
device_type
*
type
,
const
char
**
device
,
const
char
**
mount_point
);
const
char
**
device
,
const
char
**
mount_point
);
...
@@ -65,6 +65,6 @@ struct mount_point;
...
@@ -65,6 +65,6 @@ struct mount_point;
extern
struct
mount_point
*
add_dosdev_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
extern
struct
mount_point
*
add_dosdev_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
int
drive
,
const
void
*
id
,
unsigned
int
id_len
);
int
drive
,
const
void
*
id
,
unsigned
int
id_len
);
extern
struct
mount_point
*
add_volume_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
extern
struct
mount_point
*
add_volume_mount_point
(
DEVICE_OBJECT
*
device
,
UNICODE_STRING
*
device_name
,
int
drive
,
const
void
*
id
,
unsigned
int
id_len
);
const
GUID
*
guid
,
const
void
*
id
,
unsigned
int
id_len
);
extern
void
delete_mount_point
(
struct
mount_point
*
mount
);
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
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment