mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Windows: Protect against using a container file as its own keyfile. Normalizing path names to never use '/' but always '\'.
This commit is contained in:
@@ -6184,6 +6184,16 @@ BOOL CheckFileExtension (char *fileName)
|
|||||||
return FALSE;
|
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)
|
void IncreaseWrongPwdRetryCount (int count)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -328,6 +328,7 @@ static BOOL CALLBACK CloseVolumeExplorerWindowsEnum( HWND hwnd, LPARAM driveNo);
|
|||||||
BOOL CloseVolumeExplorerWindows (HWND hwnd, int driveNo);
|
BOOL CloseVolumeExplorerWindows (HWND hwnd, int driveNo);
|
||||||
BOOL CheckCapsLock (HWND hwnd, BOOL quiet);
|
BOOL CheckCapsLock (HWND hwnd, BOOL quiet);
|
||||||
BOOL CheckFileExtension (char *fileName);
|
BOOL CheckFileExtension (char *fileName);
|
||||||
|
void CorrectFileName (char* fileName);
|
||||||
void IncreaseWrongPwdRetryCount (int count);
|
void IncreaseWrongPwdRetryCount (int count);
|
||||||
void ResetWrongPwdRetryCount (void);
|
void ResetWrongPwdRetryCount (void);
|
||||||
BOOL WrongPwdRetryCountOverLimit (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;
|
BOOL status = TRUE;
|
||||||
KeyFile kfSubStruct;
|
KeyFile kfSubStruct;
|
||||||
@@ -346,6 +346,13 @@ BOOL KeyFilesApply (HWND hwndDlg, Password *password, KeyFile *firstKeyFile)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CorrectFileName (kfSub->FileName);
|
||||||
|
if (volumeFileName && (_stricmp (volumeFileName, kfSub->FileName) == 0))
|
||||||
|
{
|
||||||
|
// skip if it is the current container file name
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
++keyfileCount;
|
++keyfileCount;
|
||||||
|
|
||||||
// Apply keyfile to the pool
|
// 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))
|
if (SelectMultipleFiles (hwndDlg, "SELECT_KEYFILE", kf->FileName, sizeof(kf->FileName),bHistory))
|
||||||
{
|
{
|
||||||
|
bool containerFileSkipped = false;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
|
CorrectFileName (kf->FileName);
|
||||||
LoadKeyList (hwndDlg, param->FirstKeyFile);
|
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)));
|
} while (SelectMultipleFilesNext (kf->FileName, sizeof(kf->FileName)));
|
||||||
|
|
||||||
|
if (containerFileSkipped)
|
||||||
|
{
|
||||||
|
Warning ("SELECTED_KEYFILE_IS_CONTAINER_FILE", hwndDlg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free (kf);
|
free (kf);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ typedef struct KeyFileStruct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
char VolumeFileName[MAX_PATH + 1];
|
||||||
BOOL EnableKeyFiles;
|
BOOL EnableKeyFiles;
|
||||||
KeyFile *FirstKeyFile;
|
KeyFile *FirstKeyFile;
|
||||||
} KeyFilesDlgParam;
|
} KeyFilesDlgParam;
|
||||||
@@ -38,7 +39,7 @@ KeyFile *KeyFileAdd (KeyFile *firstKeyFile, KeyFile *keyFile);
|
|||||||
void KeyFileRemoveAll (KeyFile **firstKeyFile);
|
void KeyFileRemoveAll (KeyFile **firstKeyFile);
|
||||||
KeyFile *KeyFileClone (KeyFile *keyFile);
|
KeyFile *KeyFileClone (KeyFile *keyFile);
|
||||||
KeyFile *KeyFileCloneAll (KeyFile *firstKeyFile);
|
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 CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
BOOL KeyfilesPopupMenu (HWND hwndDlg, POINT popupPosition, KeyFilesDlgParam *dialogParam);
|
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">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_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="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="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">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>
|
<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
|
namespace VeraCryptExpander
|
||||||
{
|
{
|
||||||
/* defined in WinMain.c, referenced by ExpandVolumeWizard() */
|
/* 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;
|
OpenVolumeContext expandVol;
|
||||||
BOOL truecryptMode = FALSE;
|
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;
|
goto ret;
|
||||||
}
|
}
|
||||||
@@ -509,7 +509,7 @@ void ExpandVolumeWizard (HWND hwndDlg, char *lpszVolume)
|
|||||||
WaitCursor();
|
WaitCursor();
|
||||||
|
|
||||||
if (KeyFilesEnable && FirstKeyFile)
|
if (KeyFilesEnable && FirstKeyFile)
|
||||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, lpszVolume);
|
||||||
|
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
|
|||||||
@@ -367,7 +367,7 @@ GetItemLong (HWND hTree, int itemNo)
|
|||||||
return item.lParam;
|
return item.lParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char PasswordDlgVolume[MAX_PATH + 1];
|
static char PasswordDlgVolume[MAX_PATH + 1] = {0};
|
||||||
static BOOL PasswordDialogDisableMountOptions;
|
static BOOL PasswordDialogDisableMountOptions;
|
||||||
static char *PasswordDialogTitleStringId;
|
static char *PasswordDialogTitleStringId;
|
||||||
|
|
||||||
@@ -655,7 +655,7 @@ BOOL CALLBACK ExtcvPasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
|
|||||||
if (lw == IDOK)
|
if (lw == IDOK)
|
||||||
{
|
{
|
||||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
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);
|
GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), (LPSTR) szXPwd->Text, MAX_PASSWORD + 1);
|
||||||
szXPwd->Length = strlen ((char *) szXPwd->Text);
|
szXPwd->Length = strlen ((char *) szXPwd->Text);
|
||||||
@@ -780,7 +780,7 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
|
|||||||
return 0;
|
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;
|
int result;
|
||||||
PasswordDlgParam dlgParam;
|
PasswordDlgParam dlgParam;
|
||||||
@@ -793,6 +793,8 @@ int ExtcvAskVolumePassword (HWND hwndDlg, Password *password, int *pkcs5, int *p
|
|||||||
dlgParam.pim = pim;
|
dlgParam.pim = pim;
|
||||||
dlgParam.truecryptMode = truecryptMode;
|
dlgParam.truecryptMode = truecryptMode;
|
||||||
|
|
||||||
|
StringCbCopyA (PasswordDlgVolume, sizeof(PasswordDlgVolume), fileName);
|
||||||
|
|
||||||
result = DialogBoxParamW (hInst,
|
result = DialogBoxParamW (hInst,
|
||||||
MAKEINTRESOURCEW (IDD_PASSWORD_DLG), hwndDlg,
|
MAKEINTRESOURCEW (IDD_PASSWORD_DLG), hwndDlg,
|
||||||
(DLGPROC) ExtcvPasswordDlgProc, (LPARAM) &dlgParam);
|
(DLGPROC) ExtcvPasswordDlgProc, (LPARAM) &dlgParam);
|
||||||
|
|||||||
@@ -7112,7 +7112,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
{
|
{
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
if (!KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile))
|
if (!KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile, NULL))
|
||||||
{
|
{
|
||||||
NormalCursor ();
|
NormalCursor ();
|
||||||
return 1;
|
return 1;
|
||||||
@@ -7217,7 +7217,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
|
|
||||||
if (KeyFilesEnable)
|
if (KeyFilesEnable)
|
||||||
{
|
{
|
||||||
KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &volumePassword, FirstKeyFile, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bInPlaceEncNonSys)
|
if (!bInPlaceEncNonSys)
|
||||||
|
|||||||
@@ -429,6 +429,12 @@ BOOL VolumeSelected (HWND hwndDlg)
|
|||||||
return (GetWindowTextLength (GetDlgItem (hwndDlg, IDC_VOLUME)) > 0);
|
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
|
/* Returns TRUE if the last partition/drive selected via the Select Device dialog box was the system
|
||||||
partition/drive and if it is encrypted.
|
partition/drive and if it is encrypted.
|
||||||
WARNING: This function is very fast but not always reliable (for example, if the user manually types
|
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;
|
int retCode = 0;
|
||||||
|
|
||||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szFileName, sizeof (szFileName));
|
GetVolumePath (MainDlg, szFileName, sizeof (szFileName));
|
||||||
|
|
||||||
retCode = IsSystemDevicePath (szFileName, MainDlg, FALSE);
|
retCode = IsSystemDevicePath (szFileName, MainDlg, FALSE);
|
||||||
|
|
||||||
@@ -496,7 +502,7 @@ static string ResolveAmbiguousSelection (HWND hwndDlg, int *driveNoPtr)
|
|||||||
if (VolumeSelected (MainDlg))
|
if (VolumeSelected (MainDlg))
|
||||||
{
|
{
|
||||||
// volPathInputField will contain the volume path (if any) from the input field below the drive list
|
// 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)
|
if (!ambig)
|
||||||
retPath = (string) volPathInputField;
|
retPath = (string) volPathInputField;
|
||||||
@@ -1096,7 +1102,7 @@ BOOL CheckSysEncMountWithoutPBA (HWND hwndDlg, const char *devicePath, BOOL quie
|
|||||||
|
|
||||||
if (strlen (devicePath) < 2)
|
if (strlen (devicePath) < 2)
|
||||||
{
|
{
|
||||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szDevicePath, sizeof (szDevicePath));
|
GetVolumePath (MainDlg, szDevicePath, sizeof (szDevicePath));
|
||||||
CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), szDevicePath, &tmpbDevice);
|
CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), szDevicePath, &tmpbDevice);
|
||||||
|
|
||||||
if (!tmpbDevice)
|
if (!tmpbDevice)
|
||||||
@@ -1859,6 +1865,13 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
|
|||||||
PimValueChangedWarning = FALSE;
|
PimValueChangedWarning = FALSE;
|
||||||
|
|
||||||
ZeroMemory (&newKeyFilesParam, sizeof (newKeyFilesParam));
|
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"));
|
SetWindowTextW (hwndDlg, GetString ("IDD_PASSWORDCHANGE_DLG"));
|
||||||
LocalizeDialog (hwndDlg, "IDD_PASSWORDCHANGE_DLG");
|
LocalizeDialog (hwndDlg, "IDD_PASSWORDCHANGE_DLG");
|
||||||
@@ -2379,7 +2392,7 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
|
|||||||
return 1;
|
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));
|
GetWindowText (GetDlgItem (hwndDlg, IDC_OLD_PASSWORD), (LPSTR) oldPassword.Text, sizeof (oldPassword.Text));
|
||||||
oldPassword.Length = (unsigned __int32) strlen ((char *) 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 ();
|
WaitCursor ();
|
||||||
|
|
||||||
if (KeyFilesEnable)
|
if (KeyFilesEnable)
|
||||||
KeyFilesApply (hwndDlg, &oldPassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &oldPassword, FirstKeyFile, szFileName);
|
||||||
|
|
||||||
if (newKeyFilesParam.EnableKeyFiles)
|
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;
|
nStatus = ERR_DONT_REPORT;
|
||||||
goto err;
|
goto err;
|
||||||
@@ -2781,7 +2794,7 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
|
|||||||
if (lw == IDOK)
|
if (lw == IDOK)
|
||||||
{
|
{
|
||||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
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);
|
GetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), (LPSTR) szXPwd->Text, MAX_PASSWORD + 1);
|
||||||
szXPwd->Length = (unsigned __int32) strlen ((char *) szXPwd->Text);
|
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)
|
if (szFileName == NULL)
|
||||||
{
|
{
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), fileName, sizeof (fileName));
|
GetVolumePath (hwndDlg, fileName, sizeof (fileName));
|
||||||
szFileName = fileName;
|
szFileName = fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4245,7 +4258,7 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, char *szFileName, int pim)
|
|||||||
Password emptyPassword;
|
Password emptyPassword;
|
||||||
emptyPassword.Length = 0;
|
emptyPassword.Length = 0;
|
||||||
|
|
||||||
KeyFilesApply (hwndDlg, &emptyPassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &emptyPassword, FirstKeyFile, szFileName);
|
||||||
// try TrueCrypt mode first since it is quick, only if pim = 0
|
// try TrueCrypt mode first since it is quick, only if pim = 0
|
||||||
if (EffectiveVolumePim == 0)
|
if (EffectiveVolumePim == 0)
|
||||||
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &emptyPassword, 0, 0, TRUE, bCacheInDriver, bForceMount, &mountOptions, Silent, FALSE);
|
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 ();
|
WaitCursor ();
|
||||||
|
|
||||||
if (KeyFilesEnable)
|
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);
|
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode, bCacheInDriver, bForceMount, &mountOptions, Silent, !Silent);
|
||||||
NormalCursor ();
|
NormalCursor ();
|
||||||
@@ -4617,9 +4630,9 @@ static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt)
|
|||||||
WaitCursor();
|
WaitCursor();
|
||||||
|
|
||||||
if (FirstCmdKeyFile)
|
if (FirstCmdKeyFile)
|
||||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstCmdKeyFile);
|
KeyFilesApply (hwndDlg, &VolumePassword, FirstCmdKeyFile, NULL);
|
||||||
else if (KeyFilesEnable)
|
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_PTR result;
|
||||||
int newPimValue = -1;
|
int newPimValue = -1;
|
||||||
|
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), szFileName, sizeof (szFileName));
|
GetVolumePath (hwndDlg, szFileName, sizeof (szFileName));
|
||||||
if (IsMountedVolume (szFileName))
|
if (IsMountedVolume (szFileName))
|
||||||
{
|
{
|
||||||
Warning (pwdChangeDlgMode == PCDM_CHANGE_PKCS5_PRF ? "MOUNTED_NO_PKCS5_PRF_CHANGE" : "MOUNTED_NOPWCHANGE", hwndDlg);
|
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];
|
char volPath [TC_MAX_PATH];
|
||||||
|
|
||||||
GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
GetVolumePath (MainDlg, volPath, sizeof (volPath));
|
||||||
|
|
||||||
scPath = volPath;
|
scPath = volPath;
|
||||||
}
|
}
|
||||||
@@ -5856,7 +5869,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
BOOL reportBadPasswd = CmdVolumePassword.Length > 0;
|
BOOL reportBadPasswd = CmdVolumePassword.Length > 0;
|
||||||
|
|
||||||
if (FirstCmdKeyFile)
|
if (FirstCmdKeyFile)
|
||||||
KeyFilesApply (hwndDlg, &CmdVolumePassword, FirstCmdKeyFile);
|
KeyFilesApply (hwndDlg, &CmdVolumePassword, FirstCmdKeyFile, szFileName);
|
||||||
|
|
||||||
mounted = MountVolume (hwndDlg, szDriveLetter[0] - 'A',
|
mounted = MountVolume (hwndDlg, szDriveLetter[0] - 'A',
|
||||||
szFileName, &CmdVolumePassword, EffectiveVolumePkcs5, CmdVolumePim, EffectiveVolumeTrueCryptMode, bCacheInDriver, bForceMount,
|
szFileName, &CmdVolumePassword, EffectiveVolumePkcs5, CmdVolumePim, EffectiveVolumeTrueCryptMode, bCacheInDriver, bForceMount,
|
||||||
@@ -5895,7 +5908,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
if (KeyFilesEnable && FirstKeyFile)
|
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);
|
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;
|
return 1;
|
||||||
|
|
||||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
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))
|
if (CheckMountList (hwndDlg, FALSE))
|
||||||
@@ -7024,7 +7041,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||||
|
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
@@ -7047,7 +7064,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||||
|
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
@@ -7323,7 +7340,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
wchar_t volPathLowerW[TC_MAX_PATH];
|
wchar_t volPathLowerW[TC_MAX_PATH];
|
||||||
|
|
||||||
// volPathLower will contain the volume path (if any) from the input field below the drive list
|
// 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
|
if (LOWORD (selectedDrive) != TC_MLIST_ITEM_NONSYS_VOL
|
||||||
&& !(VolumeSelected (hwndDlg) && IsMountedVolume (volPathLower)))
|
&& !(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 */
|
char volPath[TC_MAX_PATH]; /* Volume to mount */
|
||||||
|
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||||
|
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
@@ -7496,7 +7513,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
{
|
{
|
||||||
char volPath[TC_MAX_PATH]; /* Volume to mount */
|
char volPath[TC_MAX_PATH]; /* Volume to mount */
|
||||||
|
|
||||||
GetWindowText (GetDlgItem (hwndDlg, IDC_VOLUME), volPath, sizeof (volPath));
|
GetVolumePath (hwndDlg, volPath, sizeof (volPath));
|
||||||
|
|
||||||
WaitCursor ();
|
WaitCursor ();
|
||||||
|
|
||||||
@@ -8980,7 +8997,7 @@ int BackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, const char *lps
|
|||||||
WaitCursor();
|
WaitCursor();
|
||||||
|
|
||||||
if (KeyFilesEnable && FirstKeyFile)
|
if (KeyFilesEnable && FirstKeyFile)
|
||||||
KeyFilesApply (hwndDlg, askPassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, askPassword, FirstKeyFile, lpszVolume);
|
||||||
|
|
||||||
nStatus = OpenVolume (askVol, lpszVolume, askPassword, *askPkcs5, *askPim, VolumeTrueCryptMode, FALSE, bPreserveTimestamp, FALSE);
|
nStatus = OpenVolume (askVol, lpszVolume, askPassword, *askPkcs5, *askPim, VolumeTrueCryptMode, FALSE, bPreserveTimestamp, FALSE);
|
||||||
|
|
||||||
@@ -9251,7 +9268,7 @@ int RestoreVolumeHeader (HWND hwndDlg, const char *lpszVolume)
|
|||||||
WaitCursor();
|
WaitCursor();
|
||||||
|
|
||||||
if (KeyFilesEnable && FirstKeyFile)
|
if (KeyFilesEnable && FirstKeyFile)
|
||||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, lpszVolume);
|
||||||
|
|
||||||
nStatus = OpenVolume (&volume, lpszVolume, &VolumePassword, VolumePkcs5, VolumePim, VolumeTrueCryptMode,TRUE, bPreserveTimestamp, TRUE);
|
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)
|
if (KeyFilesEnable && FirstKeyFile)
|
||||||
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile);
|
KeyFilesApply (hwndDlg, &VolumePassword, FirstKeyFile, bDevice? NULL : lpszVolume);
|
||||||
|
|
||||||
// Decrypt volume header
|
// Decrypt volume header
|
||||||
headerOffsetBackupFile = 0;
|
headerOffsetBackupFile = 0;
|
||||||
@@ -10133,7 +10150,11 @@ void MountSelectedVolume (HWND hwndDlg, BOOL mountWithOptions)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (mountOptions.ProtectHiddenVolume && hidVolProtKeyFilesParam.EnableKeyFiles)
|
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))
|
if (CheckMountList (hwndDlg, FALSE))
|
||||||
|
|||||||
Reference in New Issue
Block a user