mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Windows: Only use A: and B: for mounting when no other free drive letter available or when explicitly chosen by user. This avoid side effects when mounting volumes as removable media and automatic drive selection (e.g. A: become invisible in explorer after closing all explorer instances although it is still mounted).
This commit is contained in:
@@ -6760,11 +6760,13 @@ DWORD GetUsedLogicalDrives (void)
|
|||||||
int GetFirstAvailableDrive ()
|
int GetFirstAvailableDrive ()
|
||||||
{
|
{
|
||||||
DWORD dwUsedDrives = GetUsedLogicalDrives();
|
DWORD dwUsedDrives = GetUsedLogicalDrives();
|
||||||
int i;
|
int i, drive;
|
||||||
|
|
||||||
for (i = 0; i < 26; i++)
|
/* let A: and B: be used as last resort since they can introduce side effects */
|
||||||
|
for (i = 2; i < 28; i++)
|
||||||
{
|
{
|
||||||
if (!(dwUsedDrives & 1 << i))
|
drive = (i < 26) ? i : (i - 26);
|
||||||
|
if (!(dwUsedDrives & 1 << drive))
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5075,6 +5075,7 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
|||||||
if (!mounted)
|
if (!mounted)
|
||||||
{
|
{
|
||||||
int nDosDriveNo;
|
int nDosDriveNo;
|
||||||
|
int driveAItem = -1, driveBItem = -1;
|
||||||
|
|
||||||
while (LOWORD (GetItemLong (driveList, selDrive)) != 0xffff)
|
while (LOWORD (GetItemLong (driveList, selDrive)) != 0xffff)
|
||||||
{
|
{
|
||||||
@@ -5084,11 +5085,39 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
nDosDriveNo = HIWORD(GetItemLong (driveList, selDrive)) - L'A';
|
nDosDriveNo = HIWORD(GetItemLong (driveList, selDrive)) - L'A';
|
||||||
|
|
||||||
|
/* don't use drives A: and B: for now until no other free drive found */
|
||||||
|
if (nDosDriveNo == 0)
|
||||||
|
{
|
||||||
|
driveAItem = selDrive;
|
||||||
|
selDrive++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (nDosDriveNo == 1)
|
||||||
|
{
|
||||||
|
driveBItem = selDrive;
|
||||||
|
selDrive++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LOWORD (GetItemLong (driveList, selDrive)) == 0xffff)
|
if (LOWORD (GetItemLong (driveList, selDrive)) == 0xffff)
|
||||||
goto ret;
|
{
|
||||||
|
/* use A: or B: if available as a last resort */
|
||||||
|
if (driveAItem >= 0)
|
||||||
|
{
|
||||||
|
nDosDriveNo = 0;
|
||||||
|
selDrive = driveAItem;
|
||||||
|
}
|
||||||
|
else if (driveBItem >= 0)
|
||||||
|
{
|
||||||
|
nDosDriveNo = 1;
|
||||||
|
selDrive = driveBItem;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
goto ret;
|
||||||
|
}
|
||||||
|
|
||||||
// First try user password then cached passwords
|
// First try user password then cached passwords
|
||||||
if ((mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, TRUE, FALSE)) > 0
|
if ((mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, TRUE, FALSE)) > 0
|
||||||
|
|||||||
Reference in New Issue
Block a user