mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 02:58: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 ()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -5075,6 +5075,7 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
||||
if (!mounted)
|
||||
{
|
||||
int nDosDriveNo;
|
||||
int driveAItem = -1, driveBItem = -1;
|
||||
|
||||
while (LOWORD (GetItemLong (driveList, selDrive)) != 0xffff)
|
||||
{
|
||||
@@ -5084,11 +5085,39 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
||||
continue;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
if ((mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, TRUE, FALSE)) > 0
|
||||
|
||||
Reference in New Issue
Block a user