* mount.cc (fs_info::update): Revert to open filesystem with access set
to READ_CONTROL. If that fails, try additionally with FILE_READ_DATA.
This commit is contained in:
parent
3f6f9155c9
commit
4a77fa092c
@ -1,3 +1,8 @@
|
||||
2009-07-23 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* mount.cc (fs_info::update): Revert to open filesystem with access set
|
||||
to READ_CONTROL. If that fails, try additionally with FILE_READ_DATA.
|
||||
|
||||
2009-07-22 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* exceptions.cc (handle_exceptions): Set si_addr according to
|
||||
|
@ -130,14 +130,20 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
|
||||
vol = in_vol;
|
||||
else
|
||||
{
|
||||
ULONG access = READ_CONTROL;
|
||||
/* Always caseinsensitive. We really just need access to the drive. */
|
||||
InitializeObjectAttributes (&attr, upath, OBJ_CASE_INSENSITIVE, NULL,
|
||||
NULL);
|
||||
/* At least one filesystem (HGFS, VMware shared folders) doesn't like
|
||||
to be opened with acces set to just READ_CONTROL. No worries, since
|
||||
filesystem information is available without any access bit set. */
|
||||
status = NtOpenFile (&vol, 0, &attr, &io, FILE_SHARE_VALID_FLAGS,
|
||||
status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
|
||||
FILE_OPEN_FOR_BACKUP_INTENT);
|
||||
/* At least one filesystem (HGFS, VMware shared folders) doesn't like
|
||||
to be opened with access set to just READ_CONTROL. */
|
||||
if (status == STATUS_INVALID_PARAMETER)
|
||||
{
|
||||
access |= FILE_READ_DATA;
|
||||
status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
|
||||
FILE_OPEN_FOR_BACKUP_INTENT);
|
||||
}
|
||||
while (!NT_SUCCESS (status)
|
||||
&& (attr.ObjectName->Length > 7 * sizeof (WCHAR)
|
||||
|| status == STATUS_NO_MEDIA_IN_DEVICE))
|
||||
@ -152,7 +158,7 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
|
||||
}
|
||||
else if (dir.Length > 7 * sizeof (WCHAR))
|
||||
dir.Length -= sizeof (WCHAR);
|
||||
status = NtOpenFile (&vol, 0, &attr, &io, FILE_SHARE_VALID_FLAGS,
|
||||
status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
|
||||
FILE_OPEN_FOR_BACKUP_INTENT);
|
||||
}
|
||||
if (!NT_SUCCESS (status))
|
||||
|
Loading…
x
Reference in New Issue
Block a user