Windows: Protect against using a container file as its own keyfile. Normalizing path names to never use '/' but always '\'.
This commit is contained in:
parent
20cb199e55
commit
ad3b8eca69
|
@ -6184,6 +6184,16 @@ BOOL CheckFileExtension (char *fileName)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void CorrectFileName (char* fileName)
|
||||
{
|
||||
/* replace '/' by '\' */
|
||||
size_t i, len = strlen (fileName);
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
if (fileName [i] == '/')
|
||||
fileName [i] = '\\';
|
||||
}
|
||||
}
|
||||
|
||||
void IncreaseWrongPwdRetryCount (int count)
|
||||
{
|
||||
|
|
|
@ -328,6 +328,7 @@ static BOOL CALLBACK CloseVolumeExplorerWindowsEnum( HWND hwnd, LPARAM driveNo);
|
|||
BOOL CloseVolumeExplorerWindows (HWND hwnd, int driveNo);
|
||||
BOOL CheckCapsLock (HWND hwnd, BOOL quiet);
|
||||
BOOL CheckFileExtension (char *fileName);
|
||||
void CorrectFileName (char* fileName);
|
||||
void IncreaseWrongPwdRetryCount (int count);
|
||||
void ResetWrongPwdRetryCount (void);
|
||||
BOOL WrongPwdRetryCountOverLimit (void);
|
||||
|
|
|
@ -222,7 +222,7 @@ close:
|
|||
}
|
||||
|
||||
|
||||
BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile)
|
||||
BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile, const char* volumeFileName)
|
||||
{
|
||||
BOOL status = TRUE;
|
||||
KeyFile kfSubStruct;
|
||||
|
@ -322,7 +322,7 @@ BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile)
|
|||
StringCbPrintfA (kfSub->FileName, sizeof(kfSub->FileName), "%s%c%s", kf->FileName,
|
||||
'\\',
|
||||
fBuf.name
|
||||
);
|
||||
);
|
||||
|
||||
// Determine whether it's a path or a file
|
||||
if (stat (kfSub->FileName, &statStruct) != 0)
|
||||
|
@ -346,6 +346,13 @@ BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile)
|
|||
continue;
|
||||
}
|
||||
|
||||
CorrectFileName (kfSub->FileName);
|
||||
if (volumeFileName && (_stricmp (volumeFileName, kfSub->FileName) == 0))
|
||||
{
|
||||
// skip if it is the current container file name
|
||||
continue;
|
||||
}
|
||||
|
||||
++keyfileCount;
|
||||
|
||||
// Apply keyfile to the pool
|
||||
|
@ -474,13 +481,25 @@ BOOL CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
if (SelectMultipleFiles (hwndDlg, "SELECT_KEYFILE", kf->FileName, sizeof(kf->FileName),bHistory))
|
||||
{
|
||||
bool containerFileSkipped = false;
|
||||
do
|
||||
{
|
||||
param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
|
||||
LoadKeyList (hwndDlg, param->FirstKeyFile);
|
||||
CorrectFileName (kf->FileName);
|
||||
if (_stricmp (param->VolumeFileName, kf->FileName) == 0)
|
||||
containerFileSkipped = true;
|
||||
else
|
||||
{
|
||||
param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
|
||||
LoadKeyList (hwndDlg, param->FirstKeyFile);
|
||||
|
||||
kf = (KeyFile *) malloc (sizeof (KeyFile));
|
||||
kf = (KeyFile *) malloc (sizeof (KeyFile));
|
||||
}
|
||||
} while (SelectMultipleFilesNext (kf->FileName, sizeof(kf->FileName)));
|
||||
|
||||
if (containerFileSkipped)
|
||||
{
|
||||
Warning ("SELECTED_KEYFILE_IS_CONTAINER_FILE", hwndDlg);
|
||||
}
|
||||
}
|
||||
|
||||
free (kf);
|
||||
|
|
|
@ -30,6 +30,7 @@ typedef struct KeyFileStruct
|
|||
|
||||
typedef struct
|
||||
{
|
||||
char VolumeFileName[MAX_PATH + 1];
|
||||
BOOL EnableKeyFiles;
|
||||
KeyFile *FirstKeyFile;
|
||||
} KeyFilesDlgParam;
|
||||
|
@ -38,7 +39,7 @@ KeyFile *KeyFileAdd (KeyFile *firstKeyFile, KeyFile *keyFile);
|
|||
void KeyFileRemoveAll (KeyFile **firstKeyFile);
|
||||
KeyFile *KeyFileClone (KeyFile *keyFile);
|
||||
KeyFile *KeyFileCloneAll (KeyFile *firstKeyFile);
|
||||
BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile);
|
||||
BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFilem, const char* volumeFileName);
|
||||
|
||||
BOOL CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
BOOL KeyfilesPopupMenu (HWND hwndDlg, POINT popupPosition, KeyFilesDlgParam *dialogParam);
|
||||
|
|
|
@ -647,6 +647,7 @@
|
|||
<string lang="en" key="SELECT_KEYFILE">Select Keyfile</string>
|
||||
<string lang="en" key="SELECT_KEYFILE_PATH">Select a keyfile search path. WARNING: Note that only the path will be remembered, not the filenames!</string>
|
||||
<string lang="en" key="SELECT_KEYFILE_GENERATION_DIRECTORY">Select a directory where to store the keyfiles.</string>
|
||||
<string lang="en" key="SELECTED_KEYFILE_IS_CONTAINER_FILE">The current container file was selected as a keyfile. It will be skipped.</string>
|
||||
<string lang="en" key="SERPENT_HELP">Designed by Ross Anderson, Eli Biham, and Lars Knudsen. Published in 1998. 256-bit key, 128-bit block. Mode of operation is XTS. Serpent was one of the AES finalists.</string>
|
||||
<string lang="en" key="SIZE_HELP">Please specify the size of the container you want to create.\n\nIf you create a dynamic (sparse-file) container, this parameter will specify its maximum possible size.\n\nNote that the minimum possible size of a FAT volume is 292 KB. The minimum possible size of an NTFS volume is 3792 KB.</string>
|
||||
<string lang="en" key="SIZE_HELP_HIDDEN_HOST_VOL">Please specify the size of the outer volume to be created (you will first create the outer volume and then a hidden volume within it). The minimum possible size of a volume within which a hidden volume is intended to be created is 340 KB.</string>
|
||||
|
|
|
@ -59,7 +59,7 @@ BOOL CALLBACK ExpandVolProgressDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, L
|
|||
namespace VeraCryptExpander
|
||||
{
|
||||
/* defined in WinMain.c, referenced by ExpandVolumeWizard() */
|
||||
int ExtcvAskVolumePassword (HWND hwndDlg, Password *password, int *pkcs5, int *pim, BOOL* truecryptMode, char *titleStringId, BOOL enableMountOptions);
|
||||
int ExtcvAskVolumePassword (HWND hwndDlg, const char* fileName, Password *password, int *pkcs5, int *pim, BOOL* truecryptMode, char *titleStringId, BOOL enableMountOptions);
|
||||
}
|
||||
|
||||
|
||||
|
@ -500,7 +500,7 @@ void ExpandVolumeWizard (HWND hwndDlg, char *lpszVolume)
|
|||
OpenVolumeContext expandVol;
|
||||
BOOL truecryptMode = FALSE;
|
||||
|
||||
if (!VeraCryptExpander::ExtcvAskVolumePassword (hwndDlg, &VolumePassword, &VolumePkcs5, &VolumePim, &truecryptMode, "ENTER_NORMAL_VOL_PASSWORD", FALSE))
|
||||
if (!VeraCryptExpander::ExtcvAskVolumePassword (hwndDlg, lpszVolume, &VolumePassword, &VolumePkcs5, &VolumePim, &truecryptMode, "ENTER_NORMAL_VOL_PASSWORD", FALSE))
|
||||
{
|
||||
goto ret;
|
||||
}
|
||||
|
@ -509,7 +509,7 @@ void ExpandVolumeWizard (HWND hwndDlg, char *lpszVolume)
|
|||
WaitCursor();
|
||||
|
||||
if (KeyFilesEnable && FirstKeyFile)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, lpszVolume);
|
||||
|
||||
WaitCursor ();
|
||||
|
||||
|
|
|
@ -367,7 +367,7 @@ GetItemLong (HWND hTree, int itemNo)
|
|||
return item.lParam;
|
||||
}
|
||||
|
||||
static char PasswordDlgVolume[MAX_PATH + 1];
|
||||
static char PasswordDlgVolume[MAX_PATH + 1] = {0};
|
||||
static BOOL PasswordDialogDisableMountOptions;
|
||||
static char *PasswordDialogTitleStringId;
|
||||
|
||||
|
@ -655,7 +655,7 @@ BOOL CALLBACK ExtcvPasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
|
|||
if (lw == IDOK)
|
||||
{
|
||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile, PasswordDlgVolume);
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), (LPSTR) szXPwd->Text, MAX_PASSWORD + 1);
|
||||
szXPwd->Length = strlen ((char *) szXPwd->Text);
|
||||
|
@ -780,7 +780,7 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int ExtcvAskVolumePassword (HWND hwndDlg, Password *password, int *pkcs5, int *pim, BOOL* truecryptMode, char *titleStringId, BOOL enableMountOptions)
|
||||
int ExtcvAskVolumePassword (HWND hwndDlg, const char* fileName, Password *password, int *pkcs5, int *pim, BOOL* truecryptMode, char *titleStringId, BOOL enableMountOptions)
|
||||
{
|
||||
int result;
|
||||
PasswordDlgParam dlgParam;
|
||||
|
@ -793,6 +793,8 @@ int ExtcvAskVolumePassword (HWND hwndDlg, Password *password, int *pkcs5, int *p
|
|||
dlgParam.pim = pim;
|
||||
dlgParam.truecryptMode = truecryptMode;
|
||||
|
||||
StringCbCopyA (PasswordDlgVolume, sizeof(PasswordDlgVolume), fileName);
|
||||
|
||||
result = DialogBoxParamW (hInst,
|
||||
MAKEINTRESOURCEW (IDD_PASSWORD_DLG), hwndDlg,
|
||||
(DLGPROC) ExtcvPasswordDlgProc, (LPARAM) &dlgParam);
|
||||
|
|
|
@ -7112,7 +7112,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
WaitCursor ();
|
||||
|
||||
if (!KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile))
|
||||
if (!KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile, NULL))
|
||||
{
|
||||
NormalCursor ();
|
||||
return 1;
|
||||
|
@ -7217,7 +7217,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
|
||||
if (KeyFilesEnable)
|
||||
{
|
||||
KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile, NULL);
|
||||
}
|
||||
|
||||
if (!bInPlaceEncNonSys)
|
||||
|
|
|
@ -429,6 +429,12 @@ BOOL VolumeSelected (HWND hwndDlg)
|
|||
return (GetWindowTextLength (GetDlgItem (hwndDlg, IDC_VOLUME)) > 0);
|
||||
}
|
||||
|
||||
void GetVolumePath (HWND hwndDlg, LPSTR szPath, int nMaxCount)
|
||||
{
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), szPath, nMaxCount);
|
||||
CorrectFileName (szPath);
|
||||
}
|
||||
|
||||
/* Returns TRUE if the last partition/drive selected via the Select Device dialog box was the system
|
||||
partition/drive and if it is encrypted.
|
||||
WARNING: This function is very fast but not always reliable (for example, if the user manually types
|
||||
|
@ -447,7 +453,7 @@ BOOL ActiveSysEncDeviceSelected (void)
|
|||
{
|
||||
int retCode = 0;
|
||||
|
||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szFileName, sizeof (szFileName));
|
||||
GetVolumePath (MainDlg, szFileName, sizeof (szFileName));
|
||||
|
||||
retCode = IsSystemDevicePath (szFileName, MainDlg, FALSE);
|
||||
|
||||
|
@ -496,7 +502,7 @@ static string ResolveAmbiguousSelection (HWND hwndDlg, int *driveNoPtr)
|
|||
if (VolumeSelected (MainDlg))
|
||||
{
|
||||
// volPathInputField will contain the volume path (if any) from the input field below the drive list
|
||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), volPathInputField, sizeof (volPathInputField));
|
||||
GetVolumePath (MainDlg, volPathInputField, sizeof (volPathInputField));
|
||||
|
||||
if (!ambig)
|
||||
retPath = (string) volPathInputField;
|
||||
|
@ -1096,7 +1102,7 @@ BOOL CheckSysEncMountWithoutPBA (HWND hwndDlg, const char *devicePath, BOOL quie
|
|||
|
||||
if (strlen (devicePath) < 2)
|
||||
{
|
||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szDevicePath, sizeof (szDevicePath));
|
||||
GetVolumePath (MainDlg, szDevicePath, sizeof (szDevicePath));
|
||||
CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), szDevicePath, &tmpbDevice);
|
||||
|
||||
if (!tmpbDevice)
|
||||
|
@ -1859,6 +1865,13 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
|
|||
PimValueChangedWarning = FALSE;
|
||||
|
||||
ZeroMemory (&newKeyFilesParam, sizeof (newKeyFilesParam));
|
||||
if (NewPimValuePtr)
|
||||
{
|
||||
/* we are in the case of a volume. Store its name to use it in the key file dialog
|
||||
* this will help avoid using the current container file as a key file
|
||||
*/
|
||||
StringCbCopyA (newKeyFilesParam.VolumeFileName, sizeof (newKeyFilesParam.VolumeFileName), szFileName);
|
||||
}
|
||||
|
||||
SetWindowTextW (hwndDlg, GetString ("IDD_PASSWORDCHANGE_DLG"));
|
||||
LocalizeDialog (hwndDlg, "IDD_PASSWORDCHANGE_DLG");
|
||||
|
@ -2379,7 +2392,7 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
|
|||
return 1;
|
||||
}
|
||||
|
||||
GetWindowText (GetDlgItem (hParent, IDC_VOLUME), szFileName, sizeof (szFileName));
|
||||
GetVolumePath (hParent, szFileName, sizeof (szFileName));
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_OLD_PASSWORD), (LPSTR) oldPassword.Text, sizeof (oldPassword.Text));
|
||||
oldPassword.Length = (unsigned __int32) strlen ((char *) oldPassword.Text);
|
||||
|
@ -2402,11 +2415,11 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
|
|||
WaitCursor ();
|
||||
|
||||
if (KeyFilesEnable)
|
||||
KeyFilesApply (hwndDlg, &oldPassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &oldPassword, FirstKeyFile, szFileName);
|
||||
|
||||
if (newKeyFilesParam.EnableKeyFiles)
|
||||
{
|
||||
if (!KeyFilesApply (hwndDlg, &newPassword, pwdChangeDlgMode == PCDM_CHANGE_PKCS5_PRF ? FirstKeyFile : newKeyFilesParam.FirstKeyFile))
|
||||
if (!KeyFilesApply (hwndDlg, &newPassword, pwdChangeDlgMode == PCDM_CHANGE_PKCS5_PRF ? FirstKeyFile : newKeyFilesParam.FirstKeyFile, szFileName))
|
||||
{
|
||||
nStatus = ERR_DONT_REPORT;
|
||||
goto err;
|
||||
|
@ -2781,7 +2794,7 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
|
|||
if (lw == IDOK)
|
||||
{
|
||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile, strlen (PasswordDlgVolume) > 0 ? PasswordDlgVolume : NULL);
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), (LPSTR) szXPwd->Text, MAX_PASSWORD + 1);
|
||||
szXPwd->Length = (unsigned __int32) strlen ((char *) szXPwd->Text);
|
||||
|
@ -4202,7 +4215,7 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, char *szFileName, int pim)
|
|||
|
||||
if (szFileName == NULL)
|
||||
{
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), fileName, sizeof (fileName));
|
||||
GetVolumePath (hwndDlg, fileName, sizeof (fileName));
|
||||
szFileName = fileName;
|
||||
}
|
||||
|
||||
|
@ -4245,7 +4258,7 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, char *szFileName, int pim)
|
|||
Password emptyPassword;
|
||||
emptyPassword.Length = 0;
|
||||
|
||||
KeyFilesApply (hwndDlg, &emptyPassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &emptyPassword, FirstKeyFile, szFileName);
|
||||
// try TrueCrypt mode first since it is quick, only if pim = 0
|
||||
if (EffectiveVolumePim == 0)
|
||||
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &emptyPassword, 0, 0, TRUE, bCacheInDriver, bForceMount, &mountOptions, Silent, FALSE);
|
||||
|
@ -4307,7 +4320,7 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, char *szFileName, int pim)
|
|||
WaitCursor ();
|
||||
|
||||
if (KeyFilesEnable)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, szFileName);
|
||||
|
||||
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bForceMount, &mountOptions, Silent, !Silent);
|
||||
NormalCursor ();
|
||||
|
@ -4617,9 +4630,9 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
|||
WaitCursor();
|
||||
|
||||
if (FirstCmdKeyFile)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstCmdKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstCmdKeyFile, NULL);
|
||||
else if (KeyFilesEnable)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, NULL);
|
||||
|
||||
}
|
||||
|
||||
|
@ -4832,7 +4845,7 @@ static void ChangePassword (HWND hwndDlg)
|
|||
INT_PTR result;
|
||||
int newPimValue = -1;
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, sizeof (szFileName));
|
||||
GetVolumePath (hwndDlg, szFileName, sizeof (szFileName));
|
||||
if (IsMountedVolume (szFileName))
|
||||
{
|
||||
Warning (pwdChangeDlgMode == PCDM_CHANGE_PKCS5_PRF ? "MOUNTED_NO_PKCS5_PRF_CHANGE" : "MOUNTED_NOPWCHANGE", hwndDlg);
|
||||
|
@ -5177,7 +5190,7 @@ static void DecryptNonSysDevice (HWND hwndDlg, BOOL bResolveAmbiguousSelection,
|
|||
|
||||
char volPath [TC_MAX_PATH];
|
||||
|
||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
||||
GetVolumePath (MainDlg, volPath, sizeof (volPath));
|
||||
|
||||
scPath = volPath;
|
||||
}
|
||||
|
@ -5856,7 +5869,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
BOOL reportBadPasswd = CmdVolumePassword.Length > 0;
|
||||
|
||||
if (FirstCmdKeyFile)
|
||||
KeyFilesApply (hwndDlg, &CmdVolumePassword, FirstCmdKeyFile);
|
||||
KeyFilesApply (hwndDlg, &CmdVolumePassword, FirstCmdKeyFile, szFileName);
|
||||
|
||||
mounted = MountVolume (hwndDlg, szDriveLetter[0] - 'A',
|
||||
szFileName, &CmdVolumePassword, EffectiveVolumePkcs5, CmdVolumePim, EffectiveVolumeTrueCryptMode, bCacheInDriver, bForceMount,
|
||||
|
@ -5895,7 +5908,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
WaitCursor ();
|
||||
|
||||
if (KeyFilesEnable && FirstKeyFile)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, szFileName);
|
||||
|
||||
mounted = MountVolume (hwndDlg, szDriveLetter[0] - 'A', szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bForceMount, &mountOptions, FALSE, TRUE);
|
||||
|
||||
|
@ -6629,7 +6642,11 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
return 1;
|
||||
|
||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile);
|
||||
{
|
||||
char selectedVolume [TC_MAX_PATH + 1];
|
||||
GetVolumePath (hwndDlg, selectedVolume, sizeof (selectedVolume));
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile, selectedVolume);
|
||||
}
|
||||
}
|
||||
|
||||
if (CheckMountList (hwndDlg, FALSE))
|
||||
|
@ -7024,7 +7041,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
else
|
||||
{
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
||||
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||
|
||||
WaitCursor ();
|
||||
|
||||
|
@ -7047,7 +7064,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
else
|
||||
{
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
||||
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||
|
||||
WaitCursor ();
|
||||
|
||||
|
@ -7323,7 +7340,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
wchar_t volPathLowerW[TC_MAX_PATH];
|
||||
|
||||
// volPathLower will contain the volume path (if any) from the input field below the drive list
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPathLower, sizeof (volPathLower));
|
||||
GetVolumePath (hwndDlg, volPathLower, sizeof (volPathLower));
|
||||
|
||||
if (LOWORD (selectedDrive) != TC_MLIST_ITEM_NONSYS_VOL
|
||||
&& !(VolumeSelected (hwndDlg) && IsMountedVolume (volPathLower)))
|
||||
|
@ -7469,7 +7486,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
char volPath[TC_MAX_PATH]; /* Volume to mount */
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
||||
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||
|
||||
WaitCursor ();
|
||||
|
||||
|
@ -7496,7 +7513,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
char volPath[TC_MAX_PATH]; /* Volume to mount */
|
||||
|
||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
||||
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||
|
||||
WaitCursor ();
|
||||
|
||||
|
@ -8980,7 +8997,7 @@ int BackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, const char *lps
|
|||
WaitCursor();
|
||||
|
||||
if (KeyFilesEnable && FirstKeyFile)
|
||||
KeyFilesApply (hwndDlg, askPassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, askPassword, FirstKeyFile, lpszVolume);
|
||||
|
||||
nStatus = OpenVolume (askVol, lpszVolume, askPassword, *askPkcs5, *askPim, VolumeTrueCryptMode, FALSE, bPreserveTimestamp, FALSE);
|
||||
|
||||
|
@ -9251,7 +9268,7 @@ int RestoreVolumeHeader (HWND hwndDlg, const char *lpszVolume)
|
|||
WaitCursor();
|
||||
|
||||
if (KeyFilesEnable && FirstKeyFile)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, lpszVolume);
|
||||
|
||||
nStatus = OpenVolume (&volume, lpszVolume, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode,TRUE, bPreserveTimestamp, TRUE);
|
||||
|
||||
|
@ -9451,7 +9468,7 @@ int RestoreVolumeHeader (HWND hwndDlg, const char *lpszVolume)
|
|||
}
|
||||
|
||||
if (KeyFilesEnable && FirstKeyFile)
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, bDevice? NULL : lpszVolume);
|
||||
|
||||
// Decrypt volume header
|
||||
headerOffsetBackupFile = 0;
|
||||
|
@ -10133,7 +10150,11 @@ void MountSelectedVolume (HWND hwndDlg, BOOL mountWithOptions)
|
|||
return;
|
||||
|
||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile);
|
||||
{
|
||||
char selectedVolume [TC_MAX_PATH + 1];
|
||||
GetVolumePath (hwndDlg, selectedVolume, sizeof (selectedVolume));
|
||||
KeyFilesApply (hwndDlg, &mountOptions.ProtectedHidVolPassword, hidVolProtKeyFilesParam.FirstKeyFile, selectedVolume);
|
||||
}
|
||||
}
|
||||
|
||||
if (CheckMountList (hwndDlg, FALSE))
|
||||
|
|
Loading…
Reference in New Issue