1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Windows: when mounting multiple favorites, use PIM of previous favorite alongside its password if option "Include PIM when caching password" is selected alongside option "Temporarily cache password during Mount Favorite Volumes operations".

This commit is contained in:
Mounir IDRASSI
2017-07-02 17:03:03 +02:00
parent 2db0061741
commit a0f2ffb90b
6 changed files with 28 additions and 23 deletions

View File

@@ -5801,7 +5801,7 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
if (benchmarkType == BENCHMARK_TYPE_PRF) if (benchmarkType == BENCHMARK_TYPE_PRF)
{ {
benchmarkPim = GetPim (hwndDlg, IDC_PIM); benchmarkPim = GetPim (hwndDlg, IDC_PIM, 0);
benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT); benchmarkPreBoot = GetCheckBox (hwndDlg, IDC_BENCHMARK_PREBOOT);
} }
else else
@@ -12670,9 +12670,9 @@ std::wstring FindLatestFileOrDirectory (const std::wstring &directory, const wch
return wstring (directory) + L"\\" + name; return wstring (directory) + L"\\" + name;
} }
int GetPim (HWND hwndDlg, UINT ctrlId) int GetPim (HWND hwndDlg, UINT ctrlId, int defaultPim)
{ {
int pim = 0; int pim = defaultPim;
HWND hCtrl = GetDlgItem (hwndDlg, ctrlId); HWND hCtrl = GetDlgItem (hwndDlg, ctrlId);
if (IsWindowEnabled (hCtrl) && IsWindowVisible (hCtrl)) if (IsWindowEnabled (hCtrl) && IsWindowVisible (hCtrl))
{ {
@@ -12682,7 +12682,7 @@ int GetPim (HWND hwndDlg, UINT ctrlId)
wchar_t* endPtr = NULL; wchar_t* endPtr = NULL;
pim = wcstol(szTmp, &endPtr, 10); pim = wcstol(szTmp, &endPtr, 10);
if (pim < 0 || endPtr == szTmp || !endPtr || *endPtr != L'\0') if (pim < 0 || endPtr == szTmp || !endPtr || *endPtr != L'\0')
pim = 0; pim = defaultPim;
} }
} }
return pim; return pim;

View File

@@ -503,7 +503,7 @@ BOOL VolumePathExists (const wchar_t *volumePath);
BOOL IsWindowsIsoBurnerAvailable (); BOOL IsWindowsIsoBurnerAvailable ();
BOOL LaunchWindowsIsoBurner (HWND hwnd, const wchar_t *isoPath); BOOL LaunchWindowsIsoBurner (HWND hwnd, const wchar_t *isoPath);
BOOL IsApplicationInstalled (const wchar_t *appName); BOOL IsApplicationInstalled (const wchar_t *appName);
int GetPim (HWND hwndDlg, UINT ctrlId); int GetPim (HWND hwndDlg, UINT ctrlId, int defaultPim);
void SetPim (HWND hwndDlg, UINT ctrlId, int pim); void SetPim (HWND hwndDlg, UINT ctrlId, int pim);
BOOL GetPassword (HWND hwndDlg, UINT ctrlID, char* passValue, int bufSize, BOOL bShowError); BOOL GetPassword (HWND hwndDlg, UINT ctrlID, char* passValue, int bufSize, BOOL bShowError);
void SetPassword (HWND hwndDlg, UINT ctrlID, char* passValue); void SetPassword (HWND hwndDlg, UINT ctrlID, char* passValue);

View File

@@ -685,7 +685,7 @@ BOOL CALLBACK ExtcvPasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
*pkcs5 = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); *pkcs5 = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
*truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE); *truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE);
*pim = GetPim (hwndDlg, IDC_PIM); *pim = GetPim (hwndDlg, IDC_PIM, 0);
/* check that PRF is supported in TrueCrypt Mode */ /* check that PRF is supported in TrueCrypt Mode */
if ( (*truecryptMode) if ( (*truecryptMode)

View File

@@ -5611,7 +5611,7 @@ BOOL CALLBACK PageDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
{ {
if (lw == IDC_PIM) if (lw == IDC_PIM)
{ {
if(GetPim (hwndDlg, IDC_PIM) != 0) if(GetPim (hwndDlg, IDC_PIM, 0) != 0)
{ {
PimValueChangedWarning = TRUE; PimValueChangedWarning = TRUE;
SetDlgItemTextW (hwndDlg, IDC_PIM_HELP, GetString (SysEncInEffect ()? "PIM_SYSENC_CHANGE_WARNING" : "PIM_CHANGE_WARNING")); SetDlgItemTextW (hwndDlg, IDC_PIM_HELP, GetString (SysEncInEffect ()? "PIM_SYSENC_CHANGE_WARNING" : "PIM_CHANGE_WARNING"));
@@ -7582,7 +7582,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
else if (nCurPageNo == PIM_PAGE) else if (nCurPageNo == PIM_PAGE)
{ {
volumePim = GetPim (hCurPage, IDC_PIM); volumePim = GetPim (hCurPage, IDC_PIM, 0);
if (!SysEncInEffect() && (volumePim > MAX_PIM_VALUE)) if (!SysEncInEffect() && (volumePim > MAX_PIM_VALUE))
{ {
@@ -7639,7 +7639,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
hash_algo = (int) SendMessage (GetDlgItem (hCurPage, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hCurPage, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); hash_algo = (int) SendMessage (GetDlgItem (hCurPage, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hCurPage, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
volumePim = GetPim (hCurPage, IDC_PIM); volumePim = GetPim (hCurPage, IDC_PIM, 0);
// Store the password in case we need to restore it after keyfile is applied to it // Store the password in case we need to restore it after keyfile is applied to it
if (!GetPassword (hCurPage, IDC_PASSWORD_DIRECT, szRawPassword, sizeof (szRawPassword), TRUE)) if (!GetPassword (hCurPage, IDC_PASSWORD_DIRECT, szRawPassword, sizeof (szRawPassword), TRUE))
@@ -8764,7 +8764,7 @@ ovf_end:
else if (nCurPageNo == PIM_PAGE) else if (nCurPageNo == PIM_PAGE)
{ {
volumePim = GetPim (hCurPage, IDC_PIM); volumePim = GetPim (hCurPage, IDC_PIM, 0);
} }
else if (nCurPageNo == HIDDEN_VOL_HOST_PASSWORD_PAGE else if (nCurPageNo == HIDDEN_VOL_HOST_PASSWORD_PAGE

View File

@@ -391,7 +391,7 @@ namespace VeraCrypt
case IDC_PIM: case IDC_PIM:
if (hw == EN_CHANGE) if (hw == EN_CHANGE)
{ {
int pim = GetPim (hwndDlg, IDC_PIM); int pim = GetPim (hwndDlg, IDC_PIM, -1);
if (pim > (SystemFavoritesMode? MAX_BOOT_PIM_VALUE: MAX_PIM_VALUE)) if (pim > (SystemFavoritesMode? MAX_BOOT_PIM_VALUE: MAX_PIM_VALUE))
{ {
SetDlgItemText (hwndDlg, IDC_PIM, L""); SetDlgItemText (hwndDlg, IDC_PIM, L"");
@@ -618,9 +618,14 @@ namespace VeraCrypt
/* support old attribute name before it was changed to PIM*/ /* support old attribute name before it was changed to PIM*/
XmlGetAttributeText (xml, "pin", label, sizeof (label)); XmlGetAttributeText (xml, "pin", label, sizeof (label));
} }
if (label[0])
{
favorite.Pim = strtol (label, NULL, 10); favorite.Pim = strtol (label, NULL, 10);
if (favorite.Pim < 0 || favorite.Pim > (systemFavorites? MAX_BOOT_PIM_VALUE : MAX_PIM_VALUE)) if (favorite.Pim < 0 || favorite.Pim > (systemFavorites? MAX_BOOT_PIM_VALUE : MAX_PIM_VALUE))
favorite.Pim = 0; favorite.Pim = -1;
}
else
favorite.Pim = -1;
char boolVal[2]; char boolVal[2];
XmlGetAttributeText (xml, "readonly", boolVal, sizeof (boolVal)); XmlGetAttributeText (xml, "readonly", boolVal, sizeof (boolVal));
@@ -786,7 +791,7 @@ namespace VeraCrypt
if (!favorite.Label.empty()) if (!favorite.Label.empty())
s += L" label=\"" + favorite.Label + L"\""; s += L" label=\"" + favorite.Label + L"\"";
if (favorite.Pim > 0) if ((favorite.Pim >= 0) && (favorite.TrueCryptMode <= 0))
s += L" pim=\"" + IntToWideString(favorite.Pim) + L"\""; s += L" pim=\"" + IntToWideString(favorite.Pim) + L"\"";
if (favorite.Pkcs5 > 0) if (favorite.Pkcs5 > 0)
@@ -1029,7 +1034,7 @@ namespace VeraCrypt
else else
favorite.Label.clear(); favorite.Label.clear();
favorite.Pim = GetPim (hwndDlg, IDC_PIM); favorite.Pim = GetPim (hwndDlg, IDC_PIM, -1);
favorite.UseLabelInExplorer = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_LABEL_IN_EXPLORER) != 0); favorite.UseLabelInExplorer = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_LABEL_IN_EXPLORER) != 0);
favorite.UseVolumeID = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID) != 0); favorite.UseVolumeID = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID) != 0);
int nSelected = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0); int nSelected = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0);

View File

@@ -2434,7 +2434,7 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
if (lw == IDC_PIM) if (lw == IDC_PIM)
{ {
if(GetPim (hwndDlg, IDC_OLD_PIM) != GetPim (hwndDlg, IDC_PIM)) if(GetPim (hwndDlg, IDC_OLD_PIM, 0) != GetPim (hwndDlg, IDC_PIM, 0))
{ {
PimValueChangedWarning = TRUE; PimValueChangedWarning = TRUE;
SetDlgItemTextW (hwndDlg, IDC_PIM_HELP, GetString (bSysEncPwdChangeDlgMode? "PIM_SYSENC_CHANGE_WARNING" : "PIM_CHANGE_WARNING")); SetDlgItemTextW (hwndDlg, IDC_PIM_HELP, GetString (bSysEncPwdChangeDlgMode? "PIM_SYSENC_CHANGE_WARNING" : "PIM_CHANGE_WARNING"));
@@ -2631,8 +2631,8 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
BOOL truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE); BOOL truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE);
int old_pim = GetPim (hwndDlg, IDC_OLD_PIM); int old_pim = GetPim (hwndDlg, IDC_OLD_PIM, 0);
int pim = GetPim (hwndDlg, IDC_PIM); int pim = GetPim (hwndDlg, IDC_PIM, 0);
if (truecryptMode && !is_pkcs5_prf_supported (old_pkcs5, TRUE, PRF_BOOT_NO)) if (truecryptMode && !is_pkcs5_prf_supported (old_pkcs5, TRUE, PRF_BOOT_NO))
{ {
@@ -3099,7 +3099,7 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
*pkcs5 = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); *pkcs5 = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
*truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE); *truecryptMode = GetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE);
*pim = GetPim (hwndDlg, IDC_PIM); *pim = GetPim (hwndDlg, IDC_PIM, 0);
/* check that PRF is supported in TrueCrypt Mode */ /* check that PRF is supported in TrueCrypt Mode */
if ( (*truecryptMode) if ( (*truecryptMode)
@@ -3651,7 +3651,7 @@ BOOL CALLBACK MountOptionsDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
mountOptions->ProtectedHidVolPkcs5Prf = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, mountOptions->ProtectedHidVolPkcs5Prf = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA,
SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0); SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0), 0);
mountOptions->ProtectedHidVolPim = GetPim (hwndDlg, IDC_PIM); mountOptions->ProtectedHidVolPim = GetPim (hwndDlg, IDC_PIM, 0);
} }
// Cleanup // Cleanup
@@ -4816,8 +4816,8 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, wchar_t *szFileName, int pim,
// try TrueCrypt mode first as it is quick, only if no custom pim specified // try TrueCrypt mode first as it is quick, only if no custom pim specified
if (EffectiveVolumeTrueCryptMode) if (EffectiveVolumeTrueCryptMode)
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, EffectiveVolumePkcs5, 0, TRUE, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, Silent, FALSE); mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, EffectiveVolumePkcs5, 0, TRUE, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, Silent, FALSE);
else else // if no PIM specified for favorite, we use also the PIM of the previous volume alongside its password.
mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, EffectiveVolumePkcs5, EffectiveVolumePim, FALSE, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, Silent, FALSE); mounted = MountVolume (hwndDlg, nDosDriveNo, szFileName, &VolumePassword, EffectiveVolumePkcs5, (EffectiveVolumePim < 0)? VolumePim : EffectiveVolumePim, FALSE, bCacheInDriver, bIncludePimInCache, bForceMount, &mountOptions, Silent, FALSE);
} }
NormalCursor (); NormalCursor ();