1
0
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:
Mounir IDRASSI
2016-04-28 10:36:04 +02:00
parent 91e3843732
commit 99de8a6dcd
2 changed files with 35 additions and 4 deletions

View File

@@ -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;
}

View File

@@ -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