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
88cde9e7
Commit
88cde9e7
authored
Nov 25, 2021
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mountmgr: Pass the SCSI device information when creating a volume.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
37b7259f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
100 deletions
+65
-100
dbus.c
dlls/mountmgr.sys/dbus.c
+2
-2
device.c
dlls/mountmgr.sys/device.c
+17
-58
diskarb.c
dlls/mountmgr.sys/diskarb.c
+23
-25
mountmgr.h
dlls/mountmgr.sys/mountmgr.h
+23
-15
No files found.
dlls/mountmgr.sys/dbus.c
View file @
88cde9e7
...
...
@@ -258,7 +258,7 @@ static void udisks_new_device( const char *udi )
if
(
device
)
{
if
(
removable
)
add_dos_device
(
-
1
,
udi
,
device
,
mount_point
,
drive_type
,
guid_ptr
,
NULL
);
else
if
(
guid_ptr
)
add_volume
(
udi
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
NULL
);
else
if
(
guid_ptr
)
add_volume
(
udi
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
NULL
,
NULL
);
}
p_dbus_message_unref
(
reply
);
...
...
@@ -427,7 +427,7 @@ static void udisks2_add_device( const char *udi, DBusMessageIter *dict, DBusMess
if
(
device
)
{
if
(
removable
)
add_dos_device
(
-
1
,
udi
,
device
,
mount_point
,
drive_type
,
guid_ptr
,
NULL
);
else
if
(
guid_ptr
)
add_volume
(
udi
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
id
);
else
if
(
guid_ptr
)
add_volume
(
udi
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
id
,
NULL
);
}
}
...
...
dlls/mountmgr.sys/device.c
View file @
88cde9e7
...
...
@@ -1362,35 +1362,8 @@ static void create_drive_devices(void)
RtlFreeHeap
(
GetProcessHeap
(),
0
,
path
);
}
/* open the "Logical Unit" key for a given SCSI address */
static
HKEY
get_scsi_device_lun_key
(
SCSI_ADDRESS
*
scsi_addr
)
{
WCHAR
dataW
[
50
];
HKEY
scsi_key
,
port_key
,
bus_key
,
target_key
,
lun_key
;
if
(
RegOpenKeyExW
(
HKEY_LOCAL_MACHINE
,
scsi_keyW
,
0
,
KEY_READ
|
KEY_WRITE
,
&
scsi_key
))
return
NULL
;
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_port_keyW
,
scsi_addr
->
PortNumber
);
if
(
RegCreateKeyExW
(
scsi_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
port_key
,
NULL
))
return
NULL
;
RegCloseKey
(
scsi_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_bus_keyW
,
scsi_addr
->
PathId
);
if
(
RegCreateKeyExW
(
port_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
bus_key
,
NULL
))
return
NULL
;
RegCloseKey
(
port_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
target_id_keyW
,
scsi_addr
->
TargetId
);
if
(
RegCreateKeyExW
(
bus_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
target_key
,
NULL
))
return
NULL
;
RegCloseKey
(
bus_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
lun_keyW
,
scsi_addr
->
Lun
);
if
(
RegCreateKeyExW
(
target_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
lun_key
,
NULL
))
return
NULL
;
RegCloseKey
(
target_key
);
return
lun_key
;
}
/* fill in the "Logical Unit" key for a given SCSI address */
void
create_scsi_entry
(
SCSI_ADDRESS
*
scsi_addr
,
UINT
init_id
,
const
char
*
driver
,
UINT
type
,
const
char
*
model
,
const
UNICODE_STRING
*
dev
)
static
void
create_scsi_entry
(
struct
volume
*
volume
,
const
struct
scsi_info
*
info
)
{
static
UCHAR
tape_no
=
0
;
static
const
WCHAR
tapeW
[]
=
{
'T'
,
'a'
,
'p'
,
'e'
,
'%'
,
'd'
,
0
};
...
...
@@ -1412,34 +1385,34 @@ void create_scsi_entry( SCSI_ADDRESS *scsi_addr, UINT init_id, const char *drive
if
(
RegOpenKeyExW
(
HKEY_LOCAL_MACHINE
,
scsi_keyW
,
0
,
KEY_READ
|
KEY_WRITE
,
&
scsi_key
))
return
;
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_port_keyW
,
scsi_addr
->
PortNumber
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_port_keyW
,
info
->
addr
.
PortNumber
);
if
(
RegCreateKeyExW
(
scsi_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
port_key
,
NULL
))
return
;
RegCloseKey
(
scsi_key
);
RtlMultiByteToUnicodeN
(
dataW
,
sizeof
(
dataW
),
&
sizeW
,
driver
,
strlen
(
driver
)
+
1
);
RtlMultiByteToUnicodeN
(
dataW
,
sizeof
(
dataW
),
&
sizeW
,
info
->
driver
,
strlen
(
info
->
driver
)
+
1
);
RegSetValueExW
(
port_key
,
driverW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
dataW
,
sizeW
);
value
=
10
;
RegSetValueExW
(
port_key
,
bus_time_scanW
,
0
,
REG_DWORD
,
(
const
BYTE
*
)
&
value
,
sizeof
(
value
));
value
=
0
;
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_bus_keyW
,
scsi_addr
->
PathId
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
scsi_bus_keyW
,
info
->
addr
.
PathId
);
if
(
RegCreateKeyExW
(
port_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
bus_key
,
NULL
))
return
;
RegCloseKey
(
port_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
init_id_keyW
,
init_id
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
init_id_keyW
,
in
fo
->
in
it_id
);
if
(
RegCreateKeyExW
(
bus_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
target_key
,
NULL
))
return
;
RegCloseKey
(
target_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
target_id_keyW
,
scsi_addr
->
TargetId
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
target_id_keyW
,
info
->
addr
.
TargetId
);
if
(
RegCreateKeyExW
(
bus_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
target_key
,
NULL
))
return
;
RegCloseKey
(
bus_key
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
lun_keyW
,
scsi_addr
->
Lun
);
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
lun_keyW
,
info
->
addr
.
Lun
);
if
(
RegCreateKeyExW
(
target_key
,
dataW
,
0
,
NULL
,
REG_OPTION_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
lun_key
,
NULL
))
return
;
RegCloseKey
(
target_key
);
switch
(
type
)
switch
(
info
->
type
)
{
case
SCSI_DISK_PERIPHERAL
:
data
=
"DiskPeripheral"
;
break
;
case
SCSI_TAPE_PERIPHERAL
:
data
=
"TapePeripheral"
;
break
;
...
...
@@ -1466,16 +1439,17 @@ void create_scsi_entry( SCSI_ADDRESS *scsi_addr, UINT init_id, const char *drive
RtlMultiByteToUnicodeN
(
dataW
,
sizeof
(
dataW
),
&
sizeW
,
data
,
strlen
(
data
)
+
1
);
RegSetValueExW
(
lun_key
,
typeW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
dataW
,
sizeW
);
RtlMultiByteToUnicodeN
(
dataW
,
sizeof
(
dataW
),
&
sizeW
,
model
,
strlen
(
model
)
+
1
);
RtlMultiByteToUnicodeN
(
dataW
,
sizeof
(
dataW
),
&
sizeW
,
info
->
model
,
strlen
(
info
->
model
)
+
1
);
RegSetValueExW
(
lun_key
,
identW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
dataW
,
sizeW
);
if
(
dev
)
if
(
volume
)
{
UNICODE_STRING
*
dev
=
&
volume
->
device
->
name
;
WCHAR
*
buffer
=
memchrW
(
dev
->
Buffer
+
1
,
'\\'
,
dev
->
Length
)
+
1
;
ULONG
length
=
dev
->
Length
-
(
buffer
-
dev
->
Buffer
)
*
sizeof
(
WCHAR
);
RegSetValueExW
(
lun_key
,
devnameW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
buffer
,
length
);
}
else
if
(
type
==
SCSI_TAPE_PERIPHERAL
)
else
if
(
info
->
type
==
SCSI_TAPE_PERIPHERAL
)
{
snprintfW
(
dataW
,
ARRAY_SIZE
(
dataW
),
tapeW
,
tape_no
++
);
RegSetValueExW
(
lun_key
,
devnameW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
dataW
,
strlenW
(
dataW
)
);
...
...
@@ -1484,25 +1458,10 @@ void create_scsi_entry( SCSI_ADDRESS *scsi_addr, UINT init_id, const char *drive
RegCloseKey
(
lun_key
);
}
/* set the "DeviceName" for a given SCSI address */
void
set_scsi_device_name
(
SCSI_ADDRESS
*
scsi_addr
,
const
UNICODE_STRING
*
dev
)
{
HKEY
lun_key
;
WCHAR
*
buffer
;
ULONG
length
;
lun_key
=
get_scsi_device_lun_key
(
scsi_addr
);
buffer
=
memchrW
(
dev
->
Buffer
+
1
,
'\\'
,
dev
->
Length
)
+
1
;
length
=
dev
->
Length
-
(
buffer
-
dev
->
Buffer
)
*
sizeof
(
WCHAR
);
RegSetValueExW
(
lun_key
,
devnameW
,
0
,
REG_SZ
,
(
const
BYTE
*
)
buffer
,
length
);
RegCloseKey
(
lun_key
);
}
/* create a new disk volume */
NTSTATUS
add_volume
(
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
const
char
*
disk_serial
)
enum
device_type
type
,
const
GUID
*
guid
,
const
char
*
disk_serial
,
const
struct
scsi_info
*
scsi_info
)
{
struct
volume
*
volume
;
NTSTATUS
status
=
STATUS_SUCCESS
;
...
...
@@ -1524,6 +1483,7 @@ NTSTATUS add_volume( const char *udi, const char *device, const char *mount_poin
found:
if
(
!
status
)
status
=
set_volume_info
(
volume
,
NULL
,
device
,
mount_point
,
type
,
guid
,
disk_serial
);
if
(
!
status
&&
scsi_info
)
create_scsi_entry
(
volume
,
scsi_info
);
if
(
volume
)
release_volume
(
volume
);
LeaveCriticalSection
(
&
device_section
);
return
status
;
...
...
@@ -1551,7 +1511,7 @@ NTSTATUS remove_volume( const char *udi )
/* create a new dos drive */
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
UNICODE_STRING
*
devname
)
const
struct
scsi_info
*
scsi_info
)
{
char
*
path
,
*
p
;
HKEY
hkey
;
...
...
@@ -1626,8 +1586,7 @@ found:
}
if
(
udi
)
notify
=
drive
->
drive
;
if
(
devname
)
*
devname
=
volume
->
device
->
name
;
if
(
scsi_info
)
create_scsi_entry
(
volume
,
scsi_info
);
done:
if
(
volume
)
release_volume
(
volume
);
...
...
dlls/mountmgr.sys/diskarb.c
View file @
88cde9e7
...
...
@@ -65,13 +65,11 @@ static void appeared_callback( DADiskRef disk, void *context )
const
void
*
ref
;
char
device
[
64
];
char
mount_point
[
PATH_MAX
];
char
model
[
64
];
size_t
model_len
=
0
;
GUID
guid
,
*
guid_ptr
=
NULL
;
enum
device_type
type
=
DEVICE_UNKNOWN
;
UINT
pdtype
=
0
;
SCSI_ADDRESS
scsi_addr
;
UNICODE_STRING
devname
;
struct
scsi_info
scsi_info
=
{
0
};
BOOL
removable
=
FALSE
;
int
fd
;
if
(
!
dict
)
return
;
...
...
@@ -98,13 +96,13 @@ static void appeared_callback( DADiskRef disk, void *context )
if
(
!
CFStringCompare
(
ref
,
CFSTR
(
"IOCDMedia"
),
0
))
{
type
=
DEVICE_CDROM
;
pd
type
=
5
;
scsi_info
.
type
=
5
;
}
if
(
!
CFStringCompare
(
ref
,
CFSTR
(
"IODVDMedia"
),
0
)
||
!
CFStringCompare
(
ref
,
CFSTR
(
"IOBDMedia"
),
0
))
{
type
=
DEVICE_DVD
;
pd
type
=
5
;
scsi_info
.
type
=
5
;
}
if
(
!
CFStringCompare
(
ref
,
CFSTR
(
"IOMedia"
),
0
))
type
=
DEVICE_HARDDISK
;
...
...
@@ -114,41 +112,38 @@ static void appeared_callback( DADiskRef disk, void *context )
{
CFIndex
i
;
CFStringGetCString
(
ref
,
model
,
sizeof
(
model
),
kCFStringEncodingASCII
);
CFStringGetCString
(
ref
,
scsi_info
.
model
,
sizeof
(
scsi_info
.
model
),
kCFStringEncodingASCII
);
model_len
+=
CFStringGetLength
(
ref
);
/* Pad to 8 characters */
for
(
i
=
0
;
i
<
(
CFIndex
)
8
-
CFStringGetLength
(
ref
);
++
i
)
model
[
model_len
++
]
=
' '
;
scsi_info
.
model
[
model_len
++
]
=
' '
;
}
if
((
ref
=
CFDictionaryGetValue
(
dict
,
CFSTR
(
"DADeviceModel"
)
)))
{
CFIndex
i
;
CFStringGetCString
(
ref
,
model
+
model_len
,
sizeof
(
model
)
-
model_len
,
kCFStringEncodingASCII
);
CFStringGetCString
(
ref
,
scsi_info
.
model
+
model_len
,
sizeof
(
scsi_info
.
model
)
-
model_len
,
kCFStringEncodingASCII
);
model_len
+=
CFStringGetLength
(
ref
);
/* Pad to 16 characters */
for
(
i
=
0
;
i
<
(
CFIndex
)
16
-
CFStringGetLength
(
ref
);
++
i
)
model
[
model_len
++
]
=
' '
;
scsi_info
.
model
[
model_len
++
]
=
' '
;
}
if
((
ref
=
CFDictionaryGetValue
(
dict
,
CFSTR
(
"DADeviceRevision"
)
)))
{
CFIndex
i
;
CFStringGetCString
(
ref
,
model
+
model_len
,
sizeof
(
model
)
-
model_len
,
kCFStringEncodingASCII
);
CFStringGetCString
(
ref
,
scsi_info
.
model
+
model_len
,
sizeof
(
scsi_info
.
model
)
-
model_len
,
kCFStringEncodingASCII
);
model_len
+=
CFStringGetLength
(
ref
);
/* Pad to 4 characters */
for
(
i
=
0
;
i
<
(
CFIndex
)
4
-
CFStringGetLength
(
ref
);
++
i
)
model
[
model_len
++
]
=
' '
;
scsi_info
.
model
[
model_len
++
]
=
' '
;
}
TRACE
(
"got mount notification for '%s' on '%s' uuid %s
\n
"
,
device
,
mount_point
,
wine_dbgstr_guid
(
guid_ptr
)
);
devname
.
Buffer
=
NULL
;
if
((
ref
=
CFDictionaryGetValue
(
dict
,
CFSTR
(
"DAMediaRemovable"
)
))
&&
CFBooleanGetValue
(
ref
))
add_dos_device
(
-
1
,
device
,
device
,
mount_point
,
type
,
guid_ptr
,
&
devname
);
else
if
(
guid_ptr
)
add_volume
(
device
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
NULL
);
if
((
ref
=
CFDictionaryGetValue
(
dict
,
CFSTR
(
"DAMediaRemovable"
)
)))
removable
=
CFBooleanGetValue
(
ref
);
if
(
!
access
(
device
,
R_OK
)
&&
(
fd
=
open
(
device
,
O_RDONLY
))
>=
0
)
...
...
@@ -157,18 +152,21 @@ static void appeared_callback( DADiskRef disk, void *context )
if
(
ioctl
(
fd
,
DKIOCSCSIIDENTIFY
,
&
dsi
)
>=
0
)
{
scsi_addr
.
PortNumber
=
dsi
.
bus
;
scsi_addr
.
PathId
=
dsi
.
port
;
scsi_addr
.
TargetId
=
dsi
.
target
;
scsi_addr
.
Lun
=
dsi
.
lun
;
/* FIXME: get real controller Id for SCSI */
/* FIXME: get real driver name */
create_scsi_entry
(
&
scsi_addr
,
255
,
"WINE SCSI"
,
pdtype
,
model
,
&
devname
);
scsi_info
.
addr
.
PortNumber
=
dsi
.
bus
;
scsi_info
.
addr
.
PathId
=
dsi
.
port
;
scsi_info
.
addr
.
TargetId
=
dsi
.
target
;
scsi_info
.
addr
.
Lun
=
dsi
.
lun
;
scsi_info
.
init_id
=
255
;
/* FIXME */
strcpy
(
scsi_info
.
driver
,
"WINE SCSI"
);
/* FIXME */
}
close
(
fd
);
}
if
(
removable
)
add_dos_device
(
-
1
,
device
,
device
,
mount_point
,
type
,
guid_ptr
,
&
scsi_info
);
else
if
(
guid_ptr
)
add_volume
(
device
,
device
,
mount_point
,
DEVICE_HARDDISK_VOL
,
guid_ptr
,
NULL
,
&
scsi_info
);
done:
CFRelease
(
dict
);
}
...
...
dlls/mountmgr.sys/mountmgr.h
View file @
88cde9e7
...
...
@@ -18,6 +18,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_MOUNTMGR_H
#define __WINE_MOUNTMGR_H
#include <stdarg.h>
#include "ntstatus.h"
...
...
@@ -52,21 +55,10 @@ enum device_type
DEVICE_RAMDISK
};
extern
NTSTATUS
add_volume
(
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
const
char
*
disk_serial
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
remove_volume
(
const
char
*
udi
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
UNICODE_STRING
*
devname
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
remove_dos_device
(
int
letter
,
const
char
*
udi
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
query_unix_drive
(
void
*
buff
,
SIZE_T
insize
,
SIZE_T
outsize
,
IO_STATUS_BLOCK
*
iosb
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
WINAPI
harddisk_driver_entry
(
DRIVER_OBJECT
*
driver
,
UNICODE_STRING
*
path
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
WINAPI
serial_driver_entry
(
DRIVER_OBJECT
*
driver
,
UNICODE_STRING
*
path
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
WINAPI
parallel_driver_entry
(
DRIVER_OBJECT
*
driver
,
UNICODE_STRING
*
path
)
DECLSPEC_HIDDEN
;
/* SCSI entry functions */
enum
scsi_device_type
{
SCSI_DISK_PERIPHERAL
=
0x00
,
...
...
@@ -92,10 +84,25 @@ enum scsi_device_type
SCSI_UNKNOWN_PERIPHERAL
=
~
0
};
extern
void
create_scsi_entry
(
SCSI_ADDRESS
*
scsi_addr
,
UINT
init_id
,
const
char
*
driver
,
UINT
type
,
const
char
*
drive
,
const
UNICODE_STRING
*
devname
)
DECLSPEC_HIDDEN
;
extern
void
set_scsi_device_name
(
SCSI_ADDRESS
*
scsi_addr
,
const
UNICODE_STRING
*
devname
)
DECLSPEC_HIDDEN
;
struct
scsi_info
{
enum
scsi_device_type
type
;
SCSI_ADDRESS
addr
;
UINT
init_id
;
char
driver
[
64
];
char
model
[
64
];
};
extern
NTSTATUS
add_volume
(
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
const
char
*
disk_serial
,
const
struct
scsi_info
*
info
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
remove_volume
(
const
char
*
udi
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
add_dos_device
(
int
letter
,
const
char
*
udi
,
const
char
*
device
,
const
char
*
mount_point
,
enum
device_type
type
,
const
GUID
*
guid
,
const
struct
scsi_info
*
info
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
remove_dos_device
(
int
letter
,
const
char
*
udi
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
query_unix_drive
(
void
*
buff
,
SIZE_T
insize
,
SIZE_T
outsize
,
IO_STATUS_BLOCK
*
iosb
)
DECLSPEC_HIDDEN
;
/* mount point functions */
...
...
@@ -110,3 +117,4 @@ extern void set_mount_point_id( struct mount_point *mount, const void *id, unsig
extern
ULONG
get_dhcp_request_param
(
const
char
*
unix_name
,
struct
mountmgr_dhcp_request_param
*
param
,
char
*
buf
,
ULONG
offset
,
ULONG
size
)
DECLSPEC_HIDDEN
;
#endif
/* __WINE_MOUNTMGR_H */
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