mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Windows: Display a warning during system encryption wizard when typed password reaches maximum length and inform user that no more characters are allowed and that they are ignored.
This commit is contained in:
@@ -1219,6 +1219,44 @@ void EnableCloseButton (HWND hwndDlg)
|
|||||||
EnableMenuItem (GetSystemMenu (hwndDlg, FALSE), SC_CLOSE, MF_BYCOMMAND | MF_ENABLED);
|
EnableMenuItem (GetSystemMenu (hwndDlg, FALSE), SC_CLOSE, MF_BYCOMMAND | MF_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HandlePasswordEditWmChar (HWND hwnd, WPARAM wParam)
|
||||||
|
{
|
||||||
|
DWORD dwStartPos = 0, dwEndPos = 0;
|
||||||
|
short vk = VkKeyScanW ((WCHAR) wParam);
|
||||||
|
BYTE vkCode = LOBYTE (vk);
|
||||||
|
BYTE vkState = HIBYTE (vk);
|
||||||
|
bool ctrlPressed = (vkState & 2) && !(vkState & 4);
|
||||||
|
int dwMaxPassLen = (int) SendMessage (hwnd, EM_GETLIMITTEXT, 0, 0);
|
||||||
|
|
||||||
|
// check if there is a selected text
|
||||||
|
SendMessage (hwnd, EM_GETSEL, (WPARAM) &dwStartPos, (LPARAM) &dwEndPos);
|
||||||
|
|
||||||
|
if ((dwStartPos == dwEndPos)
|
||||||
|
&& (vkCode != VK_DELETE) && (vkCode != VK_BACK)
|
||||||
|
&& !ctrlPressed
|
||||||
|
&& (GetWindowTextLength (hwnd) == dwMaxPassLen))
|
||||||
|
{
|
||||||
|
EDITBALLOONTIP ebt;
|
||||||
|
DWORD dwTextSize = (DWORD) wcslen (GetString ("PASSWORD_MAXLENGTH_REACHED")) + 16;
|
||||||
|
WCHAR* szErrorText = (WCHAR*) malloc (dwTextSize * sizeof (WCHAR));
|
||||||
|
|
||||||
|
StringCchPrintf (szErrorText, dwTextSize, GetString ("PASSWORD_MAXLENGTH_REACHED"), dwMaxPassLen);
|
||||||
|
|
||||||
|
ebt.cbStruct = sizeof( EDITBALLOONTIP );
|
||||||
|
ebt.pszText = szErrorText;
|
||||||
|
ebt.pszTitle = lpszTitle;
|
||||||
|
ebt.ttiIcon = TTI_ERROR_LARGE; // tooltip warning icon
|
||||||
|
|
||||||
|
SendMessage(hwnd, EM_SHOWBALLOONTIP, 0, (LPARAM)&ebt);
|
||||||
|
|
||||||
|
MessageBeep (0xFFFFFFFF);
|
||||||
|
|
||||||
|
free (szErrorText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SendMessage(hwnd, EM_HIDEBALLOONTIP, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// Protects an input field from having its content updated by a Paste action (call ToBootPwdField() to use this).
|
// Protects an input field from having its content updated by a Paste action (call ToBootPwdField() to use this).
|
||||||
static LRESULT CALLBACK BootPwdFieldProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK BootPwdFieldProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
@@ -1228,6 +1266,9 @@ static LRESULT CALLBACK BootPwdFieldProc (HWND hwnd, UINT message, WPARAM wParam
|
|||||||
{
|
{
|
||||||
case WM_PASTE:
|
case WM_PASTE:
|
||||||
return 1;
|
return 1;
|
||||||
|
case WM_CHAR:
|
||||||
|
HandlePasswordEditWmChar (hwnd, wParam);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CallWindowProcW (wp, hwnd, message, wParam, lParam);
|
return CallWindowProcW (wp, hwnd, message, wParam, lParam);
|
||||||
@@ -1338,42 +1379,7 @@ static LRESULT CALLBACK NormalPwdFieldProc (HWND hwnd, UINT message, WPARAM wPar
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_CHAR:
|
case WM_CHAR:
|
||||||
{
|
HandlePasswordEditWmChar (hwnd, wParam);
|
||||||
DWORD dwStartPos = 0, dwEndPos = 0;
|
|
||||||
short vk = VkKeyScanW ((WCHAR) wParam);
|
|
||||||
BYTE vkCode = LOBYTE (vk);
|
|
||||||
BYTE vkState = HIBYTE (vk);
|
|
||||||
bool ctrlPressed = (vkState & 2) && !(vkState & 4);
|
|
||||||
int dwMaxPassLen = bUseLegacyMaxPasswordLength? MAX_LEGACY_PASSWORD : MAX_PASSWORD;
|
|
||||||
|
|
||||||
// check if there is a selected text
|
|
||||||
SendMessage (hwnd, EM_GETSEL, (WPARAM) &dwStartPos, (LPARAM) &dwEndPos);
|
|
||||||
|
|
||||||
if ((dwStartPos == dwEndPos)
|
|
||||||
&& (vkCode != VK_DELETE) && (vkCode != VK_BACK)
|
|
||||||
&& !ctrlPressed
|
|
||||||
&& (GetWindowTextLength (hwnd) == dwMaxPassLen))
|
|
||||||
{
|
|
||||||
EDITBALLOONTIP ebt;
|
|
||||||
DWORD dwTextSize = (DWORD) wcslen (GetString ("PASSWORD_MAXLENGTH_REACHED")) + 16;
|
|
||||||
WCHAR* szErrorText = (WCHAR*) malloc (dwTextSize * sizeof (WCHAR));
|
|
||||||
|
|
||||||
StringCchPrintf (szErrorText, dwTextSize, GetString ("PASSWORD_MAXLENGTH_REACHED"), dwMaxPassLen);
|
|
||||||
|
|
||||||
ebt.cbStruct = sizeof( EDITBALLOONTIP );
|
|
||||||
ebt.pszText = szErrorText;
|
|
||||||
ebt.pszTitle = lpszTitle;
|
|
||||||
ebt.ttiIcon = TTI_ERROR_LARGE; // tooltip warning icon
|
|
||||||
|
|
||||||
SendMessage(hwnd, EM_SHOWBALLOONTIP, 0, (LPARAM)&ebt);
|
|
||||||
|
|
||||||
MessageBeep (0xFFFFFFFF);
|
|
||||||
|
|
||||||
free (szErrorText);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
SendMessage(hwnd, EM_HIDEBALLOONTIP, 0, 0);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user