VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Mount/Mount.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Mount/Mount.c')
-rw-r--r--src/Mount/Mount.c290
1 files changed, 160 insertions, 130 deletions
diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c
index 5f6e472e..c63d31eb 100644
--- a/src/Mount/Mount.c
+++ b/src/Mount/Mount.c
@@ -46,6 +46,8 @@
46#include "../Platform/Finally.h" 46#include "../Platform/Finally.h"
47#include "../Platform/ForEach.h" 47#include "../Platform/ForEach.h"
48 48
49#include <Strsafe.h>
50
49using namespace VeraCrypt; 51using namespace VeraCrypt;
50 52
51enum timer_ids 53enum timer_ids
@@ -534,7 +536,7 @@ void SaveSettings (HWND hwndDlg)
534 // Drive Letter 536 // Drive Letter
535 lLetter = GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST)); 537 lLetter = GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST));
536 if (LOWORD (lLetter) != 0xffff) 538 if (LOWORD (lLetter) != 0xffff)
537 sprintf (szTmp, "%c:", (char) HIWORD (lLetter)); 539 StringCbPrintfA (szTmp, sizeof(szTmp), "%c:", (char) HIWORD (lLetter));
538 ConfigWriteString ("LastSelectedDrive", szTmp); 540 ConfigWriteString ("LastSelectedDrive", szTmp);
539 541
540 ConfigWriteInt ("CloseSecurityTokenSessionsAfterMount", CloseSecurityTokenSessionsAfterMount); 542 ConfigWriteInt ("CloseSecurityTokenSessionsAfterMount", CloseSecurityTokenSessionsAfterMount);
@@ -721,19 +723,19 @@ static void PopulateSysEncContextMenu (HMENU popup, BOOL bToolsOnly)
721 AppendMenuW (popup, MF_STRING, IDM_PERMANENTLY_DECRYPT_SYS, GetString ("PERMANENTLY_DECRYPT")); 723 AppendMenuW (popup, MF_STRING, IDM_PERMANENTLY_DECRYPT_SYS, GetString ("PERMANENTLY_DECRYPT"));
722 724
723 AppendMenuW (popup, MF_STRING, IDM_ENCRYPT_SYSTEM_DEVICE, GetString ("ENCRYPT")); 725 AppendMenuW (popup, MF_STRING, IDM_ENCRYPT_SYSTEM_DEVICE, GetString ("ENCRYPT"));
724 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 726 AppendMenu (popup, MF_SEPARATOR, 0, "");
725 } 727 }
726 } 728 }
727 729
728 AppendMenuW (popup, MF_STRING, IDM_CHANGE_SYS_PASSWORD, GetString ("IDM_CHANGE_SYS_PASSWORD")); 730 AppendMenuW (popup, MF_STRING, IDM_CHANGE_SYS_PASSWORD, GetString ("IDM_CHANGE_SYS_PASSWORD"));
729 AppendMenuW (popup, MF_STRING, IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO, GetString ("IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO")); 731 AppendMenuW (popup, MF_STRING, IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO, GetString ("IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO"));
730 732
731 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 733 AppendMenu (popup, MF_SEPARATOR, 0, "");
732 AppendMenuW (popup, MF_STRING, IDM_SYS_ENC_SETTINGS, GetString ("IDM_SYS_ENC_SETTINGS")); 734 AppendMenuW (popup, MF_STRING, IDM_SYS_ENC_SETTINGS, GetString ("IDM_SYS_ENC_SETTINGS"));
733 735
734 if (!IsHiddenOSRunning()) 736 if (!IsHiddenOSRunning())
735 { 737 {
736 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 738 AppendMenu (popup, MF_SEPARATOR, 0, "");
737 AppendMenuW (popup, MF_STRING, IDM_CREATE_RESCUE_DISK, GetString ("IDM_CREATE_RESCUE_DISK")); 739 AppendMenuW (popup, MF_STRING, IDM_CREATE_RESCUE_DISK, GetString ("IDM_CREATE_RESCUE_DISK"));
738 AppendMenuW (popup, MF_STRING, IDM_VERIFY_RESCUE_DISK, GetString ("IDM_VERIFY_RESCUE_DISK")); 740 AppendMenuW (popup, MF_STRING, IDM_VERIFY_RESCUE_DISK, GetString ("IDM_VERIFY_RESCUE_DISK"));
739 } 741 }
@@ -742,10 +744,10 @@ static void PopulateSysEncContextMenu (HMENU popup, BOOL bToolsOnly)
742 { 744 {
743 if (SysDriveOrPartitionFullyEncrypted (FALSE) && !IsHiddenOSRunning()) 745 if (SysDriveOrPartitionFullyEncrypted (FALSE) && !IsHiddenOSRunning())
744 { 746 {
745 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 747 AppendMenu (popup, MF_SEPARATOR, 0, "");
746 AppendMenuW (popup, MF_STRING, IDM_PERMANENTLY_DECRYPT_SYS, GetString ("PERMANENTLY_DECRYPT")); 748 AppendMenuW (popup, MF_STRING, IDM_PERMANENTLY_DECRYPT_SYS, GetString ("PERMANENTLY_DECRYPT"));
747 } 749 }
748 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 750 AppendMenu (popup, MF_SEPARATOR, 0, "");
749 AppendMenuW (popup, MF_STRING, IDM_VOLUME_PROPERTIES, GetString ("IDPM_PROPERTIES")); 751 AppendMenuW (popup, MF_STRING, IDM_VOLUME_PROPERTIES, GetString ("IDPM_PROPERTIES"));
750 } 752 }
751} 753}
@@ -764,7 +766,7 @@ BOOL CheckSysEncMountWithoutPBA (const char *devicePath, BOOL quiet)
764 if (strlen (devicePath) < 2) 766 if (strlen (devicePath) < 2)
765 { 767 {
766 GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szDevicePath, sizeof (szDevicePath)); 768 GetWindowText (GetDlgItem (MainDlg, IDC_VOLUME), szDevicePath, sizeof (szDevicePath));
767 CreateFullVolumePath (szDiskFile, szDevicePath, &tmpbDevice); 769 CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), szDevicePath, &tmpbDevice);
768 770
769 if (!tmpbDevice) 771 if (!tmpbDevice)
770 { 772 {
@@ -783,7 +785,7 @@ BOOL CheckSysEncMountWithoutPBA (const char *devicePath, BOOL quiet)
783 } 785 }
784 } 786 }
785 else 787 else
786 strncpy (szDevicePath, devicePath, sizeof (szDevicePath) - 1); 788 StringCbCopyA (szDevicePath, sizeof(szDevicePath), devicePath);
787 789
788 char *partionPortion = strrchr (szDevicePath, '\\'); 790 char *partionPortion = strrchr (szDevicePath, '\\');
789 791
@@ -815,7 +817,7 @@ BOOL CheckSysEncMountWithoutPBA (const char *devicePath, BOOL quiet)
815 return FALSE; 817 return FALSE;
816 } 818 }
817 819
818 _snprintf (parentDrivePath, 820 StringCbPrintfA (parentDrivePath,
819 sizeof (parentDrivePath), 821 sizeof (parentDrivePath),
820 "\\Device\\Harddisk%d\\Partition0", 822 "\\Device\\Harddisk%d\\Partition0",
821 driveNo); 823 driveNo);
@@ -872,7 +874,7 @@ BOOL TCBootLoaderOnInactiveSysEncDrive (void)
872 if (sscanf (szDevicePath, "\\Device\\Harddisk%d\\Partition", &driveNo) != 1) 874 if (sscanf (szDevicePath, "\\Device\\Harddisk%d\\Partition", &driveNo) != 1)
873 return FALSE; 875 return FALSE;
874 876
875 _snprintf (parentDrivePath, 877 StringCbPrintfA (parentDrivePath,
876 sizeof (parentDrivePath), 878 sizeof (parentDrivePath),
877 "\\Device\\Harddisk%d\\Partition0", 879 "\\Device\\Harddisk%d\\Partition0",
878 driveNo); 880 driveNo);
@@ -949,15 +951,16 @@ static void LaunchVolCreationWizard (HWND hwndDlg, const char *arg)
949 PROCESS_INFORMATION pi; 951 PROCESS_INFORMATION pi;
950 ZeroMemory (&si, sizeof (si)); 952 ZeroMemory (&si, sizeof (si));
951 953
952 strcpy (++tmp, "VeraCrypt Format.exe\""); 954 *tmp = 0;
955 StringCbCopyA (t, sizeof(t), "\\VeraCrypt Format.exe\"");
953 956
954 if (!FileExists(t)) 957 if (!FileExists(t))
955 Error ("VOL_CREATION_WIZARD_NOT_FOUND"); // Display a user-friendly error message and advise what to do 958 Error ("VOL_CREATION_WIZARD_NOT_FOUND"); // Display a user-friendly error message and advise what to do
956 959
957 if (strlen (arg) > 0) 960 if (strlen (arg) > 0)
958 { 961 {
959 strcat (t, " "); 962 StringCbCatA (t, sizeof(t), " ");
960 strcat (t, arg); 963 StringCbCatA (t, sizeof(t), arg);
961 } 964 }
962 965
963 if (!CreateProcess (NULL, (LPSTR) t, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) 966 if (!CreateProcess (NULL, (LPSTR) t, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
@@ -1068,7 +1071,8 @@ void LoadDriveLetters (HWND hTree, int drive)
1068 listItem.iItem = item++; 1071 listItem.iItem = item++;
1069 1072
1070 listItem.pszText = szTmp; 1073 listItem.pszText = szTmp;
1071 strcpy (szTmp, " "); 1074 szTmp[0] = ' ';
1075 szTmp[1] = 0;
1072 1076
1073 listItem.lParam = MAKELONG (TC_MLIST_ITEM_SYS_DRIVE, ENC_SYSDRIVE_PSEUDO_DRIVE_LETTER); 1077 listItem.lParam = MAKELONG (TC_MLIST_ITEM_SYS_DRIVE, ENC_SYSDRIVE_PSEUDO_DRIVE_LETTER);
1074 1078
@@ -1082,7 +1086,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1082 // Fully encrypted 1086 // Fully encrypted
1083 if (SysDriveOrPartitionFullyEncrypted (TRUE)) 1087 if (SysDriveOrPartitionFullyEncrypted (TRUE))
1084 { 1088 {
1085 wcscpy (szTmpW, GetString ("SYSTEM_DRIVE")); 1089 StringCbCopyW (szTmpW, sizeof(szTmpW), GetString ("SYSTEM_DRIVE"));
1086 } 1090 }
1087 else 1091 else
1088 { 1092 {
@@ -1094,23 +1098,23 @@ void LoadDriveLetters (HWND hTree, int drive)
1094 1098
1095 if (BootEncStatus.SetupMode != SetupDecryption) 1099 if (BootEncStatus.SetupMode != SetupDecryption)
1096 { 1100 {
1097 _snwprintf (szTmpW, 1101 StringCbPrintfW (szTmpW,
1098 sizeof szTmpW/2, 1102 sizeof szTmpW,
1099 GetString ("SYSTEM_DRIVE_ENCRYPTING"), 1103 GetString ("SYSTEM_DRIVE_ENCRYPTING"),
1100 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0); 1104 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0);
1101 } 1105 }
1102 else 1106 else
1103 { 1107 {
1104 _snwprintf (szTmpW, 1108 StringCbPrintfW (szTmpW,
1105 sizeof szTmpW/2, 1109 sizeof szTmpW,
1106 GetString ("SYSTEM_DRIVE_DECRYPTING"), 1110 GetString ("SYSTEM_DRIVE_DECRYPTING"),
1107 100.0 - ((double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0)); 1111 100.0 - ((double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0));
1108 } 1112 }
1109 } 1113 }
1110 else 1114 else
1111 { 1115 {
1112 _snwprintf (szTmpW, 1116 StringCbPrintfW (szTmpW,
1113 sizeof szTmpW/2, 1117 sizeof szTmpW,
1114 GetString ("SYSTEM_DRIVE_PARTIALLY_ENCRYPTED"), 1118 GetString ("SYSTEM_DRIVE_PARTIALLY_ENCRYPTED"),
1115 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0); 1119 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0);
1116 } 1120 }
@@ -1118,7 +1122,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1118 1122
1119 ListSubItemSetW (hTree, listItem.iItem, 1, szTmpW); 1123 ListSubItemSetW (hTree, listItem.iItem, 1, szTmpW);
1120 1124
1121 GetSizeString (GetSysEncDeviceSize(TRUE), szTmpW); 1125 GetSizeString (GetSysEncDeviceSize(TRUE), szTmpW, sizeof(szTmpW));
1122 ListSubItemSetW (hTree, listItem.iItem, 2, szTmpW); 1126 ListSubItemSetW (hTree, listItem.iItem, 2, szTmpW);
1123 1127
1124 EAGetName (szTmp, propSysEnc.ea); 1128 EAGetName (szTmp, propSysEnc.ea);
@@ -1182,7 +1186,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1182 // Fully encrypted 1186 // Fully encrypted
1183 if (SysDriveOrPartitionFullyEncrypted (TRUE)) 1187 if (SysDriveOrPartitionFullyEncrypted (TRUE))
1184 { 1188 {
1185 wcscpy (szTmpW, GetString (IsHiddenOSRunning() ? "HIDDEN_SYSTEM_PARTITION" : "SYSTEM_PARTITION")); 1189 StringCbCopyW (szTmpW, sizeof(szTmpW), GetString (IsHiddenOSRunning() ? "HIDDEN_SYSTEM_PARTITION" : "SYSTEM_PARTITION"));
1186 } 1190 }
1187 else 1191 else
1188 { 1192 {
@@ -1194,23 +1198,23 @@ void LoadDriveLetters (HWND hTree, int drive)
1194 1198
1195 if (BootEncStatus.SetupMode != SetupDecryption) 1199 if (BootEncStatus.SetupMode != SetupDecryption)
1196 { 1200 {
1197 _snwprintf (szTmpW, 1201 StringCbPrintfW (szTmpW,
1198 sizeof szTmpW/2, 1202 sizeof szTmpW,
1199 GetString ("SYSTEM_PARTITION_ENCRYPTING"), 1203 GetString ("SYSTEM_PARTITION_ENCRYPTING"),
1200 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0); 1204 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0);
1201 } 1205 }
1202 else 1206 else
1203 { 1207 {
1204 _snwprintf (szTmpW, 1208 StringCbPrintfW (szTmpW,
1205 sizeof szTmpW/2, 1209 sizeof szTmpW,
1206 GetString ("SYSTEM_PARTITION_DECRYPTING"), 1210 GetString ("SYSTEM_PARTITION_DECRYPTING"),
1207 100.0 - ((double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0)); 1211 100.0 - ((double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0));
1208 } 1212 }
1209 } 1213 }
1210 else 1214 else
1211 { 1215 {
1212 _snwprintf (szTmpW, 1216 StringCbPrintfW (szTmpW,
1213 sizeof szTmpW/2, 1217 sizeof szTmpW,
1214 GetString ("SYSTEM_PARTITION_PARTIALLY_ENCRYPTED"), 1218 GetString ("SYSTEM_PARTITION_PARTIALLY_ENCRYPTED"),
1215 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0); 1219 (double) GetSysEncDeviceEncryptedPartSize (TRUE) / (double) GetSysEncDeviceSize (TRUE) * 100.0);
1216 } 1220 }
@@ -1220,7 +1224,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1220 } 1224 }
1221 else 1225 else
1222 { 1226 {
1223 ToSBCS (driver.wszVolume[i]); 1227 ToSBCS (driver.wszVolume[i], sizeof(driver.wszVolume[i]));
1224 char *path = (char *) driver.wszVolume[i]; 1228 char *path = (char *) driver.wszVolume[i];
1225 1229
1226 if (memcmp (path, "\\??\\", 4) == 0) 1230 if (memcmp (path, "\\??\\", 4) == 0)
@@ -1235,7 +1239,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1235 ListSubItemSet (hTree, listItem.iItem, 1, (char *) FitPathInGfxWidth (hTree, hUserFont, ListView_GetColumnWidth (hTree, 1) - GetTextGfxWidth (hTree, L"___", hUserFont), path).c_str()); 1239 ListSubItemSet (hTree, listItem.iItem, 1, (char *) FitPathInGfxWidth (hTree, hUserFont, ListView_GetColumnWidth (hTree, 1) - GetTextGfxWidth (hTree, L"___", hUserFont), path).c_str());
1236 } 1240 }
1237 1241
1238 GetSizeString (bSysEncPartition ? GetSysEncDeviceSize(TRUE) : driver.diskLength[i], szTmpW); 1242 GetSizeString (bSysEncPartition ? GetSysEncDeviceSize(TRUE) : driver.diskLength[i], szTmpW, sizeof(szTmpW));
1239 ListSubItemSetW (hTree, listItem.iItem, 2, szTmpW); 1243 ListSubItemSetW (hTree, listItem.iItem, 2, szTmpW);
1240 1244
1241 EAGetName (szTmp, bSysEncPartition ? propSysEnc.ea : driver.ea[i]); 1245 EAGetName (szTmp, bSysEncPartition ? propSysEnc.ea : driver.ea[i]);
@@ -1276,7 +1280,7 @@ void LoadDriveLetters (HWND hTree, int drive)
1276 wchar_t szTmp[4096]; 1280 wchar_t szTmp[4096];
1277 1281
1278 VolumeNotificationsList.bHidVolDamagePrevReported[i] = TRUE; 1282 VolumeNotificationsList.bHidVolDamagePrevReported[i] = TRUE;
1279 swprintf (szTmp, GetString ("DAMAGE_TO_HIDDEN_VOLUME_PREVENTED"), i+'A'); 1283 StringCbPrintfW (szTmp, sizeof(szTmp), GetString ("DAMAGE_TO_HIDDEN_VOLUME_PREVENTED"), i+'A');
1280 SetForegroundWindow (GetParent(hTree)); 1284 SetForegroundWindow (GetParent(hTree));
1281 MessageBoxW (GetParent(hTree), szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST); 1285 MessageBoxW (GetParent(hTree), szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST);
1282 } 1286 }
@@ -1554,9 +1558,9 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1554 bKeyboardLayoutChanged = TRUE; 1558 bKeyboardLayoutChanged = TRUE;
1555 1559
1556 wchar_t szTmp [4096]; 1560 wchar_t szTmp [4096];
1557 wcscpy (szTmp, GetString ("KEYB_LAYOUT_CHANGE_PREVENTED")); 1561 StringCbCopyW (szTmp, sizeof(szTmp), GetString ("KEYB_LAYOUT_CHANGE_PREVENTED"));
1558 wcscat (szTmp, L"\n\n"); 1562 StringCbCatW (szTmp, sizeof(szTmp), L"\n\n");
1559 wcscat (szTmp, GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION")); 1563 StringCbCatW (szTmp, sizeof(szTmp), GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION"));
1560 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST); 1564 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST);
1561 } 1565 }
1562 1566
@@ -1570,9 +1574,9 @@ BOOL CALLBACK PasswordChangeDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPAR
1570 bKeybLayoutAltKeyWarningShown = TRUE; 1574 bKeybLayoutAltKeyWarningShown = TRUE;
1571 1575
1572 wchar_t szTmp [4096]; 1576 wchar_t szTmp [4096];
1573 wcscpy (szTmp, GetString ("ALT_KEY_CHARS_NOT_FOR_SYS_ENCRYPTION")); 1577 StringCbCopyW (szTmp, sizeof(szTmp), GetString ("ALT_KEY_CHARS_NOT_FOR_SYS_ENCRYPTION"));
1574 wcscat (szTmp, L"\n\n"); 1578 StringCbCatW (szTmp, sizeof(szTmp), L"\n\n");
1575 wcscat (szTmp, GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION")); 1579 StringCbCatW (szTmp, sizeof(szTmp), GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION"));
1576 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONINFORMATION | MB_SETFOREGROUND | MB_TOPMOST); 1580 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONINFORMATION | MB_SETFOREGROUND | MB_TOPMOST);
1577 } 1581 }
1578 } 1582 }
@@ -1899,12 +1903,12 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
1899 wstring label = GetFavoriteVolumeLabel (PasswordDlgVolume); 1903 wstring label = GetFavoriteVolumeLabel (PasswordDlgVolume);
1900 if (!label.empty()) 1904 if (!label.empty())
1901 { 1905 {
1902 wsprintfW (s, GetString ("ENTER_PASSWORD_FOR_LABEL"), label.c_str()); 1906 StringCbPrintfW (s, sizeof(s), GetString ("ENTER_PASSWORD_FOR_LABEL"), label.c_str());
1903 } 1907 }
1904 else 1908 else
1905 { 1909 {
1906 wsprintfW (s, GetString ("ENTER_PASSWORD_FOR"), "___"); 1910 StringCbPrintfW (s, sizeof(s), GetString ("ENTER_PASSWORD_FOR"), "___");
1907 wsprintfW (s, GetString ("ENTER_PASSWORD_FOR"), FitPathInGfxWidth (hwndDlg, WindowTitleBarFont, rect.right - rect.left - GetTextGfxWidth (hwndDlg, s, WindowTitleBarFont), PasswordDlgVolume).c_str()); 1911 StringCbPrintfW (s, sizeof(s), GetString ("ENTER_PASSWORD_FOR"), FitPathInGfxWidth (hwndDlg, WindowTitleBarFont, rect.right - rect.left - GetTextGfxWidth (hwndDlg, s, WindowTitleBarFont), PasswordDlgVolume).c_str());
1908 } 1912 }
1909 1913
1910 SetWindowTextW (hwndDlg, s); 1914 SetWindowTextW (hwndDlg, s);
@@ -1957,7 +1961,7 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
1957 SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), tmp); 1961 SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), tmp);
1958 SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), ""); 1962 SetWindowText (GetDlgItem (hwndDlg, IDC_PASSWORD), "");
1959 1963
1960 sprintf (OrigKeyboardLayout, "%08X", (DWORD) GetKeyboardLayout (NULL) & 0xFFFF); 1964 StringCbPrintfA (OrigKeyboardLayout, sizeof(OrigKeyboardLayout),"%08X", (DWORD) GetKeyboardLayout (NULL) & 0xFFFF);
1961 1965
1962 DWORD keybLayout = (DWORD) LoadKeyboardLayout ("00000409", KLF_ACTIVATE); 1966 DWORD keybLayout = (DWORD) LoadKeyboardLayout ("00000409", KLF_ACTIVATE);
1963 1967
@@ -2015,9 +2019,9 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
2015 } 2019 }
2016 2020
2017 wchar_t szTmp [4096]; 2021 wchar_t szTmp [4096];
2018 wcscpy (szTmp, GetString ("KEYB_LAYOUT_CHANGE_PREVENTED")); 2022 StringCbCopyW (szTmp, sizeof(szTmp), GetString ("KEYB_LAYOUT_CHANGE_PREVENTED"));
2019 wcscat (szTmp, L"\n\n"); 2023 StringCbCatW (szTmp, sizeof(szTmp), L"\n\n");
2020 wcscat (szTmp, GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION")); 2024 StringCbCatW (szTmp, sizeof(szTmp), GetString ("KEYB_LAYOUT_SYS_ENC_EXPLANATION"));
2021 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST); 2025 MessageBoxW (MainDlg, szTmp, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST);
2022 } 2026 }
2023 } 2027 }
@@ -2152,9 +2156,12 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
2152 while (count-- > 0) 2156 while (count-- > 0)
2153 { 2157 {
2154 KeyFile *kf = (KeyFile *) malloc (sizeof (KeyFile)); 2158 KeyFile *kf = (KeyFile *) malloc (sizeof (KeyFile));
2155 DragQueryFile (hdrop, i++, kf->FileName, sizeof (kf->FileName)); 2159 if (kf)
2156 FirstKeyFile = KeyFileAdd (FirstKeyFile, kf); 2160 {
2157 KeyFilesEnable = TRUE; 2161 DragQueryFile (hdrop, i++, kf->FileName, sizeof (kf->FileName));
2162 FirstKeyFile = KeyFileAdd (FirstKeyFile, kf);
2163 KeyFilesEnable = TRUE;
2164 }
2158 } 2165 }
2159 2166
2160 SetCheckBox (hwndDlg, IDC_KEYFILES_ENABLE, KeyFilesEnable); 2167 SetCheckBox (hwndDlg, IDC_KEYFILES_ENABLE, KeyFilesEnable);
@@ -2351,23 +2358,27 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
2351 if (lw == IDC_MORE_SETTINGS) 2358 if (lw == IDC_MORE_SETTINGS)
2352 { 2359 {
2353 HMENU popup = CreatePopupMenu (); 2360 HMENU popup = CreatePopupMenu ();
2361 if (popup)
2362 {
2363 AppendMenuW (popup, MF_STRING, IDM_LANGUAGE, GetString ("IDM_LANGUAGE"));
2364 AppendMenuW (popup, MF_STRING, IDM_HOTKEY_SETTINGS, GetString ("IDM_HOTKEY_SETTINGS"));
2365 AppendMenuW (popup, MF_STRING, IDM_PERFORMANCE_SETTINGS, GetString ("IDM_PERFORMANCE_SETTINGS"));
2366 AppendMenuW (popup, MF_STRING, IDM_SYSENC_SETTINGS, GetString ("IDM_SYSENC_SETTINGS"));
2367 AppendMenuW (popup, MF_STRING, IDM_SYS_FAVORITES_SETTINGS, GetString ("IDM_SYS_FAVORITES_SETTINGS"));
2368 AppendMenuW (popup, MF_STRING, IDM_DEFAULT_KEYFILES, GetString ("IDM_DEFAULT_KEYFILES"));
2369 AppendMenuW (popup, MF_STRING, IDM_TOKEN_PREFERENCES, GetString ("IDM_TOKEN_PREFERENCES"));
2354 2370
2355 AppendMenuW (popup, MF_STRING, IDM_LANGUAGE, GetString ("IDM_LANGUAGE")); 2371 RECT rect;
2356 AppendMenuW (popup, MF_STRING, IDM_HOTKEY_SETTINGS, GetString ("IDM_HOTKEY_SETTINGS")); 2372 GetWindowRect (GetDlgItem (hwndDlg, IDC_MORE_SETTINGS), &rect);
2357 AppendMenuW (popup, MF_STRING, IDM_PERFORMANCE_SETTINGS, GetString ("IDM_PERFORMANCE_SETTINGS"));
2358 AppendMenuW (popup, MF_STRING, IDM_SYSENC_SETTINGS, GetString ("IDM_SYSENC_SETTINGS"));
2359 AppendMenuW (popup, MF_STRING, IDM_SYS_FAVORITES_SETTINGS, GetString ("IDM_SYS_FAVORITES_SETTINGS"));
2360 AppendMenuW (popup, MF_STRING, IDM_DEFAULT_KEYFILES, GetString ("IDM_DEFAULT_KEYFILES"));
2361 AppendMenuW (popup, MF_STRING, IDM_TOKEN_PREFERENCES, GetString ("IDM_TOKEN_PREFERENCES"));
2362
2363 RECT rect;
2364 GetWindowRect (GetDlgItem (hwndDlg, IDC_MORE_SETTINGS), &rect);
2365 2373
2366 int menuItem = TrackPopupMenu (popup, TPM_RETURNCMD | TPM_LEFTBUTTON, rect.left + 2, rect.top + 2, 0, hwndDlg, NULL); 2374 int menuItem = TrackPopupMenu (popup, TPM_RETURNCMD | TPM_LEFTBUTTON, rect.left + 2, rect.top + 2, 0, hwndDlg, NULL);
2367 DestroyMenu (popup); 2375 DestroyMenu (popup);
2368 2376
2369 SendMessage (MainDlg, WM_COMMAND, menuItem, NULL); 2377 SendMessage (MainDlg, WM_COMMAND, menuItem, NULL);
2370 return 1; 2378 return 1;
2379 }
2380 else
2381 return 0;
2371 } 2382 }
2372 2383
2373 if (HIWORD (wParam) == BN_CLICKED) 2384 if (HIWORD (wParam) == BN_CLICKED)
@@ -2739,7 +2750,7 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2739 2750
2740 // Size 2751 // Size
2741 ListItemAddW (list, i, GetString ("SIZE")); 2752 ListItemAddW (list, i, GetString ("SIZE"));
2742 swprintf (sw, L"%I64u %s", prop.diskLength, GetString ("BYTES")); 2753 StringCbPrintfW (sw, sizeof(sw), L"%I64u %s", prop.diskLength, GetString ("BYTES"));
2743 ListSubItemSetW (list, i++, 1, sw); 2754 ListSubItemSetW (list, i++, 1, sw);
2744 2755
2745 // Type 2756 // Type
@@ -2802,7 +2813,7 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2802 2813
2803 // Primary key 2814 // Primary key
2804 ListItemAddW (list, i, GetString ("KEY_SIZE")); 2815 ListItemAddW (list, i, GetString ("KEY_SIZE"));
2805 wsprintfW (sw, L"%d %s", size * 8, GetString ("BITS")); 2816 StringCbPrintfW (sw, sizeof(sw), L"%d %s", size * 8, GetString ("BITS"));
2806 ListSubItemSetW (list, i++, 1, sw); 2817 ListSubItemSetW (list, i++, 1, sw);
2807 2818
2808 if (strcmp (EAGetModeName (prop.ea, prop.mode, TRUE), "XTS") == 0) 2819 if (strcmp (EAGetModeName (prop.ea, prop.mode, TRUE), "XTS") == 0)
@@ -2817,7 +2828,7 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2817 // Tweak key (LRW) 2828 // Tweak key (LRW)
2818 2829
2819 ListItemAddW (list, i, GetString ("SECONDARY_KEY_SIZE_LRW")); 2830 ListItemAddW (list, i, GetString ("SECONDARY_KEY_SIZE_LRW"));
2820 swprintf (sw, L"%d %s", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8, GetString ("BITS")); 2831 StringCbPrintfW (sw, sizeof(sw), L"%d %s", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8, GetString ("BITS"));
2821 ListSubItemSetW (list, i++, 1, sw); 2832 ListSubItemSetW (list, i++, 1, sw);
2822 } 2833 }
2823 } 2834 }
@@ -2830,20 +2841,20 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2830 wchar_t tmpstr[64]; 2841 wchar_t tmpstr[64];
2831 int i = EAGetLastCipher(prop.ea); 2842 int i = EAGetLastCipher(prop.ea);
2832 2843
2833 swprintf (sw, L"%d", CipherGetBlockSize(i)*8); 2844 StringCbPrintfW (sw, sizeof(sw), L"%d", CipherGetBlockSize(i)*8);
2834 2845
2835 while (i = EAGetPreviousCipher(prop.ea, i)) 2846 while (i = EAGetPreviousCipher(prop.ea, i))
2836 { 2847 {
2837 swprintf (tmpstr, L"/%d", CipherGetBlockSize(i)*8); 2848 StringCbPrintfW (tmpstr, sizeof(tmpstr), L"/%d", CipherGetBlockSize(i)*8);
2838 wcscat (sw, tmpstr); 2849 StringCbCatW (sw, sizeof(sw), tmpstr);
2839 } 2850 }
2840 wcscat (sw, L" "); 2851 StringCbCatW (sw, sizeof(sw), L" ");
2841 } 2852 }
2842 else 2853 else
2843 { 2854 {
2844 swprintf (sw, L"%d ", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8); 2855 StringCbPrintfW (sw, sizeof(sw), L"%d ", CipherGetBlockSize (EAGetFirstCipher(prop.ea))*8);
2845 } 2856 }
2846 wcscat (sw, GetString ("BITS")); 2857 StringCbCatW (sw, sizeof(sw), GetString ("BITS"));
2847 ListSubItemSetW (list, i++, 1, sw); 2858 ListSubItemSetW (list, i++, 1, sw);
2848 2859
2849 // Mode 2860 // Mode
@@ -2906,7 +2917,7 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2906 { 2917 {
2907 // Volume format version 2918 // Volume format version
2908 ListItemAddW (list, i, GetString ("VOLUME_FORMAT_VERSION")); 2919 ListItemAddW (list, i, GetString ("VOLUME_FORMAT_VERSION"));
2909 sprintf (szTmp, "%d", prop.volFormatVersion); 2920 StringCbPrintfA (szTmp, sizeof(szTmp), "%d", prop.volFormatVersion);
2910 ListSubItemSet (list, i++, 1, szTmp); 2921 ListSubItemSet (list, i++, 1, szTmp);
2911 2922
2912 // Backup header 2923 // Backup header
@@ -2916,12 +2927,12 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2916 2927
2917 // Total data read 2928 // Total data read
2918 ListItemAddW (list, i, GetString ("TOTAL_DATA_READ")); 2929 ListItemAddW (list, i, GetString ("TOTAL_DATA_READ"));
2919 GetSizeString (prop.totalBytesRead, sw); 2930 GetSizeString (prop.totalBytesRead, sw, sizeof(sw));
2920 ListSubItemSetW (list, i++, 1, sw); 2931 ListSubItemSetW (list, i++, 1, sw);
2921 2932
2922 // Total data written 2933 // Total data written
2923 ListItemAddW (list, i, GetString ("TOTAL_DATA_WRITTEN")); 2934 ListItemAddW (list, i, GetString ("TOTAL_DATA_WRITTEN"));
2924 GetSizeString (prop.totalBytesWritten, sw); 2935 GetSizeString (prop.totalBytesWritten, sw, sizeof(sw));
2925 ListSubItemSetW (list, i++, 1, sw); 2936 ListSubItemSetW (list, i++, 1, sw);
2926 2937
2927 if (bSysEnc) 2938 if (bSysEnc)
@@ -2939,8 +2950,8 @@ BOOL CALLBACK VolumePropertiesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LP
2939 else 2950 else
2940 { 2951 {
2941 2952
2942 _snwprintf (sw, 2953 StringCbPrintfW (sw,
2943 sizeof sw/2, 2954 sizeof sw,
2944 GetString ("PROCESSED_PORTION_X_PERCENT"), 2955 GetString ("PROCESSED_PORTION_X_PERCENT"),
2945 (double) GetSysEncDeviceEncryptedPartSize (FALSE) / (double) GetSysEncDeviceSize (FALSE) * 100.0); 2956 (double) GetSysEncDeviceEncryptedPartSize (FALSE) / (double) GetSysEncDeviceSize (FALSE) * 100.0);
2946 2957
@@ -3078,6 +3089,7 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3078 char sysDir[MAX_PATH]; 3089 char sysDir[MAX_PATH];
3079 char volName[MAX_PATH]; 3090 char volName[MAX_PATH];
3080 int drive; 3091 int drive;
3092 char* ptr;
3081 3093
3082 GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstDir, sizeof dstDir); 3094 GetDlgItemText (hwndDlg, IDC_DIRECTORY, dstDir, sizeof dstDir);
3083 volName[0] = 0; 3095 volName[0] = 0;
@@ -3111,21 +3123,22 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3111 if (volName[1] != 0) 3123 if (volName[1] != 0)
3112 { 3124 {
3113 volName[0] = '"'; 3125 volName[0] = '"';
3114 strcat (volName, "\""); 3126 StringCbCatA (volName, sizeof(volName), "\"");
3115 } 3127 }
3116 3128
3117 GetModuleFileName (NULL, appDir, sizeof (appDir)); 3129 GetModuleFileName (NULL, appDir, sizeof (appDir));
3118 strrchr (appDir, '\\')[0] = 0; 3130 if (ptr = strrchr (appDir, '\\'))
3131 ptr[0] = 0;
3119 3132
3120 WaitCursor (); 3133 WaitCursor ();
3121 GetSystemDirectory (sysDir, sizeof (sysDir)); 3134 GetSystemDirectory (sysDir, sizeof (sysDir));
3122 3135
3123 sprintf (dstPath, "%s\\VeraCrypt", dstDir); 3136 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt", dstDir);
3124 CreateDirectory (dstPath, NULL); 3137 CreateDirectory (dstPath, NULL);
3125 3138
3126 // Main app 3139 // Main app
3127 sprintf (srcPath, "%s\\VeraCrypt.exe", appDir); 3140 StringCbPrintfA (srcPath, sizeof(srcPath), "%s\\VeraCrypt.exe", appDir);
3128 sprintf (dstPath, "%s\\VeraCrypt\\VeraCrypt.exe", dstDir); 3141 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt\\VeraCrypt.exe", dstDir);
3129 if (!TCCopyFile (srcPath, dstPath)) 3142 if (!TCCopyFile (srcPath, dstPath))
3130 { 3143 {
3131 handleWin32Error (hwndDlg); 3144 handleWin32Error (hwndDlg);
@@ -3135,8 +3148,8 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3135 // Wizard 3148 // Wizard
3136 if (copyWizard) 3149 if (copyWizard)
3137 { 3150 {
3138 sprintf (srcPath, "%s\\VeraCrypt Format.exe", appDir); 3151 StringCbPrintfA (srcPath, sizeof(srcPath), "%s\\VeraCrypt Format.exe", appDir);
3139 sprintf (dstPath, "%s\\VeraCrypt\\VeraCrypt Format.exe", dstDir); 3152 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt\\VeraCrypt Format.exe", dstDir);
3140 if (!TCCopyFile (srcPath, dstPath)) 3153 if (!TCCopyFile (srcPath, dstPath))
3141 { 3154 {
3142 handleWin32Error (hwndDlg); 3155 handleWin32Error (hwndDlg);
@@ -3145,8 +3158,8 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3145 } 3158 }
3146 3159
3147 // Driver 3160 // Driver
3148 sprintf (srcPath, "%s\\veracrypt.sys", appDir); 3161 StringCbPrintfA (srcPath, sizeof(srcPath), "%s\\veracrypt.sys", appDir);
3149 sprintf (dstPath, "%s\\VeraCrypt\\veracrypt.sys", dstDir); 3162 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt\\veracrypt.sys", dstDir);
3150 if (!TCCopyFile (srcPath, dstPath)) 3163 if (!TCCopyFile (srcPath, dstPath))
3151 { 3164 {
3152 handleWin32Error (hwndDlg); 3165 handleWin32Error (hwndDlg);
@@ -3154,8 +3167,8 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3154 } 3167 }
3155 3168
3156 // Driver x64 3169 // Driver x64
3157 sprintf (srcPath, "%s\\veracrypt-x64.sys", appDir); 3170 StringCbPrintfA (srcPath, sizeof(srcPath), "%s\\veracrypt-x64.sys", appDir);
3158 sprintf (dstPath, "%s\\VeraCrypt\\veracrypt-x64.sys", dstDir); 3171 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt\\veracrypt-x64.sys", dstDir);
3159 if (!TCCopyFile (srcPath, dstPath)) 3172 if (!TCCopyFile (srcPath, dstPath))
3160 { 3173 {
3161 handleWin32Error (hwndDlg); 3174 handleWin32Error (hwndDlg);
@@ -3165,13 +3178,13 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3165 if (GetPreferredLangId () && strcmp (GetPreferredLangId (), "en") != 0) 3178 if (GetPreferredLangId () && strcmp (GetPreferredLangId (), "en") != 0)
3166 { 3179 {
3167 // Language pack 3180 // Language pack
3168 sprintf (srcPath, "%s\\Language.%s.xml", appDir, GetPreferredLangId ()); 3181 StringCbPrintfA (srcPath, sizeof(srcPath), "%s\\Language.%s.xml", appDir, GetPreferredLangId ());
3169 sprintf (dstPath, "%s\\VeraCrypt\\Language.%s.xml", dstDir, GetPreferredLangId ()); 3182 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\VeraCrypt\\Language.%s.xml", dstDir, GetPreferredLangId ());
3170 TCCopyFile (srcPath, dstPath); 3183 TCCopyFile (srcPath, dstPath);
3171 } 3184 }
3172 3185
3173 // AutoRun 3186 // AutoRun
3174 sprintf (dstPath, "%s\\autorun.inf", dstDir); 3187 StringCbPrintfA (dstPath, sizeof(dstPath), "%s\\autorun.inf", dstDir);
3175 DeleteFile (dstPath); 3188 DeleteFile (dstPath);
3176 if (bAutoRun) 3189 if (bAutoRun)
3177 { 3190 {
@@ -3187,7 +3200,7 @@ BOOL CALLBACK TravelerDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
3187 goto stop; 3200 goto stop;
3188 } 3201 }
3189 3202
3190 sprintf (autoMount, "VeraCrypt\\VeraCrypt.exe /q background%s%s%s%s /m rm /v %s", 3203 StringCbPrintfA (autoMount, sizeof(autoMount), "VeraCrypt\\VeraCrypt.exe /q background%s%s%s%s /m rm /v %s",
3191 drive > 0 ? driveLetter : "", 3204 drive > 0 ? driveLetter : "",
3192 bExplore ? " /e" : "", 3205 bExplore ? " /e" : "",
3193 bCacheInDriver ? " /c y" : "", 3206 bCacheInDriver ? " /c y" : "",
@@ -3452,7 +3465,7 @@ static BOOL Mount (HWND hwndDlg, int nDosDriveNo, char *szFileName)
3452 } 3465 }
3453 else if (!Silent) 3466 else if (!Silent)
3454 { 3467 {
3455 strcpy (PasswordDlgVolume, szFileName); 3468 StringCbCopyA (PasswordDlgVolume, sizeof(PasswordDlgVolume), szFileName);
3456 3469
3457 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, TRUE)) 3470 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, TRUE))
3458 goto ret; 3471 goto ret;
@@ -3615,7 +3628,7 @@ retry:
3615 wchar_t msg[4096]; 3628 wchar_t msg[4096];
3616 3629
3617 VolumeNotificationsList.bHidVolDamagePrevReported [unmount.nDosDriveNo] = TRUE; 3630 VolumeNotificationsList.bHidVolDamagePrevReported [unmount.nDosDriveNo] = TRUE;
3618 swprintf (msg, GetString ("DAMAGE_TO_HIDDEN_VOLUME_PREVENTED"), unmount.nDosDriveNo + 'A'); 3631 StringCbPrintfW (msg, sizeof(msg), GetString ("DAMAGE_TO_HIDDEN_VOLUME_PREVENTED"), unmount.nDosDriveNo + 'A');
3619 SetForegroundWindow (hwndDlg); 3632 SetForegroundWindow (hwndDlg);
3620 MessageBoxW (hwndDlg, msg, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST); 3633 MessageBoxW (hwndDlg, msg, lpszTitle, MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST);
3621 3634
@@ -3836,9 +3849,9 @@ static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt)
3836 { 3849 {
3837 WCHAR szTmp[4096]; 3850 WCHAR szTmp[4096];
3838 3851
3839 swprintf (szTmp, GetString (KeyFilesEnable || FirstCmdKeyFile ? "PASSWORD_OR_KEYFILE_WRONG_AUTOMOUNT" : "PASSWORD_WRONG_AUTOMOUNT")); 3852 StringCbPrintfW (szTmp, sizeof(szTmp), GetString (KeyFilesEnable || FirstCmdKeyFile ? "PASSWORD_OR_KEYFILE_WRONG_AUTOMOUNT" : "PASSWORD_WRONG_AUTOMOUNT"));
3840 if (CheckCapsLock (hwndDlg, TRUE)) 3853 if (CheckCapsLock (hwndDlg, TRUE))
3841 wcscat (szTmp, GetString ("PASSWORD_WRONG_CAPSLOCK_ON")); 3854 StringCbCatW (szTmp, sizeof(szTmp), GetString ("PASSWORD_WRONG_CAPSLOCK_ON"));
3842 3855
3843 MessageBoxW (hwndDlg, szTmp, lpszTitle, MB_ICONWARNING); 3856 MessageBoxW (hwndDlg, szTmp, lpszTitle, MB_ICONWARNING);
3844 } 3857 }
@@ -3986,7 +3999,7 @@ static void ChangeSysEncPassword (HWND hwndDlg, BOOL bOnlyChangeKDF)
3986 3999
3987 if (CreateSysEncMutex ()) // If no instance of the wizard is currently taking care of system encryption 4000 if (CreateSysEncMutex ()) // If no instance of the wizard is currently taking care of system encryption
3988 { 4001 {
3989 sprintf (OrigKeyboardLayout, "%08X", (DWORD) GetKeyboardLayout (NULL) & 0xFFFF); 4002 StringCbPrintfA (OrigKeyboardLayout, sizeof(OrigKeyboardLayout), "%08X", (DWORD) GetKeyboardLayout (NULL) & 0xFFFF);
3990 4003
3991 bSysEncPwdChangeDlgMode = TRUE; 4004 bSysEncPwdChangeDlgMode = TRUE;
3992 4005
@@ -4251,7 +4264,7 @@ void CreateRescueDisk (void)
4251 WaitCursor(); 4264 WaitCursor();
4252 BootEncObj->CreateRescueIsoImage (false, szRescueDiskISO); 4265 BootEncObj->CreateRescueIsoImage (false, szRescueDiskISO);
4253 4266
4254 _snwprintf (szTmp, sizeof szTmp / 2, 4267 StringCbPrintfW (szTmp, sizeof szTmp,
4255 GetString (IsWindowsIsoBurnerAvailable() ? "RESCUE_DISK_NON_WIZARD_CREATION_WIN_ISOBURN" : "RESCUE_DISK_NON_WIZARD_CREATION_BURN"), 4268 GetString (IsWindowsIsoBurnerAvailable() ? "RESCUE_DISK_NON_WIZARD_CREATION_WIN_ISOBURN" : "RESCUE_DISK_NON_WIZARD_CREATION_BURN"),
4256 szRescueDiskISO); 4269 szRescueDiskISO);
4257 4270
@@ -4785,7 +4798,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
4785 { 4798 {
4786 VolumePassword.Length = 0; 4799 VolumePassword.Length = 0;
4787 4800
4788 strcpy (PasswordDlgVolume, szFileName); 4801 StringCbCopyA (PasswordDlgVolume, sizeof(PasswordDlgVolume),szFileName);
4789 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, TRUE)) 4802 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, TRUE))
4790 break; 4803 break;
4791 4804
@@ -5323,7 +5336,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5323 if (MainWindowHidden) 5336 if (MainWindowHidden)
5324 { 5337 {
5325 AppendMenuW (popup, MF_STRING, IDM_SHOW_HIDE, GetString ("SHOW_TC")); 5338 AppendMenuW (popup, MF_STRING, IDM_SHOW_HIDE, GetString ("SHOW_TC"));
5326 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5339 AppendMenu (popup, MF_SEPARATOR, 0, "");
5327 } 5340 }
5328 else if (bEnableBkgTask 5341 else if (bEnableBkgTask
5329 && (!(LastKnownMountList.ulMountedDrives == 0 5342 && (!(LastKnownMountList.ulMountedDrives == 0
@@ -5332,12 +5345,12 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5332 && GetDriverRefCount () < 2))) 5345 && GetDriverRefCount () < 2)))
5333 { 5346 {
5334 AppendMenuW (popup, MF_STRING, IDM_SHOW_HIDE, GetString ("HIDE_TC")); 5347 AppendMenuW (popup, MF_STRING, IDM_SHOW_HIDE, GetString ("HIDE_TC"));
5335 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5348 AppendMenu (popup, MF_SEPARATOR, 0, "");
5336 } 5349 }
5337 AppendMenuW (popup, MF_STRING, IDM_MOUNTALL, GetString ("IDC_MOUNTALL")); 5350 AppendMenuW (popup, MF_STRING, IDM_MOUNTALL, GetString ("IDC_MOUNTALL"));
5338 AppendMenuW (popup, MF_STRING, IDM_MOUNT_FAVORITE_VOLUMES, GetString ("IDM_MOUNT_FAVORITE_VOLUMES")); 5351 AppendMenuW (popup, MF_STRING, IDM_MOUNT_FAVORITE_VOLUMES, GetString ("IDM_MOUNT_FAVORITE_VOLUMES"));
5339 AppendMenuW (popup, MF_STRING, IDM_UNMOUNTALL, GetString ("IDC_UNMOUNTALL")); 5352 AppendMenuW (popup, MF_STRING, IDM_UNMOUNTALL, GetString ("IDC_UNMOUNTALL"));
5340 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5353 AppendMenu (popup, MF_SEPARATOR, 0, "");
5341 5354
5342 for (n = 0; n < 2; n++) 5355 for (n = 0; n < 2; n++)
5343 { 5356 {
@@ -5352,7 +5365,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5352 5365
5353 wstring label = GetFavoriteVolumeLabel (WideToSingleString (vol)); 5366 wstring label = GetFavoriteVolumeLabel (WideToSingleString (vol));
5354 5367
5355 wsprintfW (s, L"%s %c: (%s)", 5368 StringCbPrintfW (s, sizeof(s), L"%s %c: (%s)",
5356 GetString (n==0 ? "OPEN" : "DISMOUNT"), 5369 GetString (n==0 ? "OPEN" : "DISMOUNT"),
5357 i + L'A', 5370 i + L'A',
5358 label.empty() ? vol : label.c_str()); 5371 label.empty() ? vol : label.c_str());
@@ -5360,14 +5373,14 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5360 } 5373 }
5361 } 5374 }
5362 if (LastKnownMountList.ulMountedDrives != 0) 5375 if (LastKnownMountList.ulMountedDrives != 0)
5363 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5376 AppendMenu (popup, MF_SEPARATOR, 0, "");
5364 } 5377 }
5365 5378
5366 AppendMenuW (popup, MF_STRING, IDM_HELP, GetString ("MENU_HELP")); 5379 AppendMenuW (popup, MF_STRING, IDM_HELP, GetString ("MENU_HELP"));
5367 AppendMenuW (popup, MF_STRING, IDM_HOMEPAGE_SYSTRAY, GetString ("HOMEPAGE")); 5380 AppendMenuW (popup, MF_STRING, IDM_HOMEPAGE_SYSTRAY, GetString ("HOMEPAGE"));
5368 AppendMenuW (popup, MF_STRING, IDM_PREFERENCES, GetString ("IDM_PREFERENCES")); 5381 AppendMenuW (popup, MF_STRING, IDM_PREFERENCES, GetString ("IDM_PREFERENCES"));
5369 AppendMenuW (popup, MF_STRING, IDM_ABOUT, GetString ("IDM_ABOUT")); 5382 AppendMenuW (popup, MF_STRING, IDM_ABOUT, GetString ("IDM_ABOUT"));
5370 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5383 AppendMenu (popup, MF_SEPARATOR, 0, "");
5371 AppendMenuW (popup, MF_STRING, IDCANCEL, GetString ("EXIT")); 5384 AppendMenuW (popup, MF_STRING, IDCANCEL, GetString ("EXIT"));
5372 5385
5373 GetCursorPos (&pos); 5386 GetCursorPos (&pos);
@@ -5393,7 +5406,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5393 if (Dismount (hwndDlg, sel - TRAYICON_MENU_DRIVE_OFFSET - 26)) 5406 if (Dismount (hwndDlg, sel - TRAYICON_MENU_DRIVE_OFFSET - 26))
5394 { 5407 {
5395 wchar_t txt [2048]; 5408 wchar_t txt [2048];
5396 wsprintfW (txt, GetString ("VOLUME_MOUNTED_AS_DRIVE_LETTER_X_DISMOUNTED"), sel - TRAYICON_MENU_DRIVE_OFFSET - 26 + L'A'); 5409 StringCbPrintfW (txt, sizeof(txt), GetString ("VOLUME_MOUNTED_AS_DRIVE_LETTER_X_DISMOUNTED"), sel - TRAYICON_MENU_DRIVE_OFFSET - 26 + L'A');
5397 5410
5398 InfoBalloonDirect (GetString ("SUCCESSFULLY_DISMOUNTED"), txt); 5411 InfoBalloonDirect (GetString ("SUCCESSFULLY_DISMOUNTED"), txt);
5399 } 5412 }
@@ -5499,7 +5512,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5499 if (wcsstr (vol, L"\\??\\") == vol) 5512 if (wcsstr (vol, L"\\??\\") == vol)
5500 vol += 4; 5513 vol += 4;
5501 5514
5502 _snprintf (volp, sizeof(volp), "%ls", vol); 5515 StringCbPrintfA (volp, sizeof(volp), "%ls", vol);
5503 5516
5504 if (IsVolumeDeviceHosted (volp)) 5517 if (IsVolumeDeviceHosted (volp))
5505 { 5518 {
@@ -5603,7 +5616,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5603 // No mounted volume at this drive letter 5616 // No mounted volume at this drive letter
5604 5617
5605 AppendMenuW (popup, MF_STRING, IDM_MOUNT_VOLUME, GetString ("IDM_MOUNT_VOLUME")); 5618 AppendMenuW (popup, MF_STRING, IDM_MOUNT_VOLUME, GetString ("IDM_MOUNT_VOLUME"));
5606 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5619 AppendMenu (popup, MF_SEPARATOR, 0, "");
5607 AppendMenuW (popup, MF_STRING, IDPM_SELECT_FILE_AND_MOUNT, GetString ("SELECT_FILE_AND_MOUNT")); 5620 AppendMenuW (popup, MF_STRING, IDPM_SELECT_FILE_AND_MOUNT, GetString ("SELECT_FILE_AND_MOUNT"));
5608 AppendMenuW (popup, MF_STRING, IDPM_SELECT_DEVICE_AND_MOUNT, GetString ("SELECT_DEVICE_AND_MOUNT")); 5621 AppendMenuW (popup, MF_STRING, IDPM_SELECT_DEVICE_AND_MOUNT, GetString ("SELECT_DEVICE_AND_MOUNT"));
5609 break; 5622 break;
@@ -5614,13 +5627,13 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5614 5627
5615 AppendMenuW (popup, MF_STRING, IDM_UNMOUNT_VOLUME, GetString ("DISMOUNT")); 5628 AppendMenuW (popup, MF_STRING, IDM_UNMOUNT_VOLUME, GetString ("DISMOUNT"));
5616 AppendMenuW (popup, MF_STRING, IDPM_OPEN_VOLUME, GetString ("OPEN")); 5629 AppendMenuW (popup, MF_STRING, IDPM_OPEN_VOLUME, GetString ("OPEN"));
5617 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5630 AppendMenu (popup, MF_SEPARATOR, 0, "");
5618 AppendMenuW (popup, MF_STRING, IDPM_CHECK_FILESYS, GetString ("IDPM_CHECK_FILESYS")); 5631 AppendMenuW (popup, MF_STRING, IDPM_CHECK_FILESYS, GetString ("IDPM_CHECK_FILESYS"));
5619 AppendMenuW (popup, MF_STRING, IDPM_REPAIR_FILESYS, GetString ("IDPM_REPAIR_FILESYS")); 5632 AppendMenuW (popup, MF_STRING, IDPM_REPAIR_FILESYS, GetString ("IDPM_REPAIR_FILESYS"));
5620 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5633 AppendMenu (popup, MF_SEPARATOR, 0, "");
5621 AppendMenuW (popup, MF_STRING, IDPM_ADD_TO_FAVORITES, GetString ("IDPM_ADD_TO_FAVORITES")); 5634 AppendMenuW (popup, MF_STRING, IDPM_ADD_TO_FAVORITES, GetString ("IDPM_ADD_TO_FAVORITES"));
5622 AppendMenuW (popup, MF_STRING, IDPM_ADD_TO_SYSTEM_FAVORITES, GetString ("IDPM_ADD_TO_SYSTEM_FAVORITES")); 5635 AppendMenuW (popup, MF_STRING, IDPM_ADD_TO_SYSTEM_FAVORITES, GetString ("IDPM_ADD_TO_SYSTEM_FAVORITES"));
5623 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5636 AppendMenu (popup, MF_SEPARATOR, 0, "");
5624 AppendMenuW (popup, MF_STRING, IDM_VOLUME_PROPERTIES, GetString ("IDPM_PROPERTIES")); 5637 AppendMenuW (popup, MF_STRING, IDM_VOLUME_PROPERTIES, GetString ("IDPM_PROPERTIES"));
5625 break; 5638 break;
5626 5639
@@ -5867,10 +5880,10 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
5867 { 5880 {
5868 AppendMenuW (popup, MF_STRING, IDM_CHANGE_PASSWORD, GetString ("IDM_CHANGE_PASSWORD")); 5881 AppendMenuW (popup, MF_STRING, IDM_CHANGE_PASSWORD, GetString ("IDM_CHANGE_PASSWORD"));
5869 AppendMenuW (popup, MF_STRING, IDM_CHANGE_HEADER_KEY_DERIV_ALGO, GetString ("IDM_CHANGE_HEADER_KEY_DERIV_ALGO")); 5882 AppendMenuW (popup, MF_STRING, IDM_CHANGE_HEADER_KEY_DERIV_ALGO, GetString ("IDM_CHANGE_HEADER_KEY_DERIV_ALGO"));
5870 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5883 AppendMenu (popup, MF_SEPARATOR, 0, "");
5871 AppendMenuW (popup, MF_STRING, IDM_ADD_REMOVE_VOL_KEYFILES, GetString ("IDM_ADD_REMOVE_VOL_KEYFILES")); 5884 AppendMenuW (popup, MF_STRING, IDM_ADD_REMOVE_VOL_KEYFILES, GetString ("IDM_ADD_REMOVE_VOL_KEYFILES"));
5872 AppendMenuW (popup, MF_STRING, IDM_REMOVE_ALL_KEYFILES_FROM_VOL, GetString ("IDM_REMOVE_ALL_KEYFILES_FROM_VOL")); 5885 AppendMenuW (popup, MF_STRING, IDM_REMOVE_ALL_KEYFILES_FROM_VOL, GetString ("IDM_REMOVE_ALL_KEYFILES_FROM_VOL"));
5873 AppendMenu (popup, MF_SEPARATOR, 0, NULL); 5886 AppendMenu (popup, MF_SEPARATOR, 0, "");
5874 AppendMenuW (popup, MF_STRING, IDM_BACKUP_VOL_HEADER, GetString ("IDM_BACKUP_VOL_HEADER")); 5887 AppendMenuW (popup, MF_STRING, IDM_BACKUP_VOL_HEADER, GetString ("IDM_BACKUP_VOL_HEADER"));
5875 AppendMenuW (popup, MF_STRING, IDM_RESTORE_VOL_HEADER, GetString ("IDM_RESTORE_VOL_HEADER")); 5888 AppendMenuW (popup, MF_STRING, IDM_RESTORE_VOL_HEADER, GetString ("IDM_RESTORE_VOL_HEADER"));
5876 } 5889 }
@@ -6250,9 +6263,9 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
6250 // volPathHigher will contain the volume path selected in the main drive list 6263 // volPathHigher will contain the volume path selected in the main drive list
6251 wstring volPathHigher (prop.wszVolume); 6264 wstring volPathHigher (prop.wszVolume);
6252 6265
6253 ToSBCS (prop.wszVolume); 6266 ToSBCS (prop.wszVolume, sizeof(prop.wszVolume));
6254 strcpy ((char *) volPathLowerW, volPathLower); 6267 StringCbCopyA ((char *) volPathLowerW, sizeof(volPathLowerW), volPathLower);
6255 ToUNICODE ((char *) volPathLowerW); 6268 ToUNICODE ((char *) volPathLowerW, sizeof(volPathLowerW));
6256 6269
6257 if (strcmp (((memcmp ((char *) prop.wszVolume, "\\??\\", 4) == 0) ? (char *) prop.wszVolume + 4 : (char *) prop.wszVolume), volPathLower) != 0) 6270 if (strcmp (((memcmp ((char *) prop.wszVolume, "\\??\\", 4) == 0) ? (char *) prop.wszVolume + 4 : (char *) prop.wszVolume), volPathLower) != 0)
6258 { 6271 {
@@ -6700,8 +6713,11 @@ void ExtractCommandLine (HWND hwndDlg, char *lpszCommandLine)
6700 KeyFile *kf; 6713 KeyFile *kf;
6701 RelativePath2Absolute (tmpPath); 6714 RelativePath2Absolute (tmpPath);
6702 kf = (KeyFile *) malloc (sizeof (KeyFile)); 6715 kf = (KeyFile *) malloc (sizeof (KeyFile));
6703 strncpy (kf->FileName, tmpPath, sizeof (kf->FileName) - 1); 6716 if (kf)
6704 FirstCmdKeyFile = KeyFileAdd (FirstCmdKeyFile, kf); 6717 {
6718 StringCbCopyA (kf->FileName, sizeof(kf->FileName), tmpPath);
6719 FirstCmdKeyFile = KeyFileAdd (FirstCmdKeyFile, kf);
6720 }
6705 } 6721 }
6706 break; 6722 break;
6707 6723
@@ -7025,7 +7041,7 @@ BOOL TaskBarIconAdd (HWND hwnd)
7025 | LR_SHARED 7041 | LR_SHARED
7026 | (nCurrentOS != WIN_2000 ? LR_DEFAULTCOLOR : LR_VGACOLOR)); // Windows 2000 cannot display more than 16 fixed colors in notification tray 7042 | (nCurrentOS != WIN_2000 ? LR_DEFAULTCOLOR : LR_VGACOLOR)); // Windows 2000 cannot display more than 16 fixed colors in notification tray
7027 7043
7028 wcscpy (tnid.szTip, L"VeraCrypt"); 7044 StringCbCopyW (tnid.szTip, sizeof(tnid.szTip), L"VeraCrypt");
7029 7045
7030 return Shell_NotifyIconW (NIM_ADD, &tnid); 7046 return Shell_NotifyIconW (NIM_ADD, &tnid);
7031} 7047}
@@ -7450,7 +7466,7 @@ void ChangeMainWindowVisibility ()
7450} 7466}
7451 7467
7452 7468
7453int BackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolume) 7469int BackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, const char *lpszVolume)
7454{ 7470{
7455 int nStatus = ERR_OS_ERROR; 7471 int nStatus = ERR_OS_ERROR;
7456 wchar_t szTmp[4096]; 7472 wchar_t szTmp[4096];
@@ -7461,6 +7477,13 @@ int BackupVolumeHeader (HWND hwndDlg, BOOL bRequireConfirmation, char *lpszVolum
7461 byte temporaryKey[MASTER_KEYDATA_SIZE]; 7477 byte temporaryKey[MASTER_KEYDATA_SIZE];
7462 byte originalK2[MASTER_KEYDATA_SIZE]; 7478 byte originalK2[MASTER_KEYDATA_SIZE];
7463 7479
7480 if (!lpszVolume)
7481 {
7482 nStatus = ERR_OUTOFMEMORY;
7483 handleError (hwndDlg, nStatus);
7484 return nStatus;
7485 }
7486
7464 volume.VolumeIsOpen = FALSE; 7487 volume.VolumeIsOpen = FALSE;
7465 hiddenVolume.VolumeIsOpen = FALSE; 7488 hiddenVolume.VolumeIsOpen = FALSE;
7466 7489
@@ -7560,7 +7583,7 @@ noHidden:
7560 goto error; 7583 goto error;
7561 } 7584 }
7562 7585
7563 swprintf (szTmp, GetString ("CONFIRM_VOL_HEADER_BAK"), lpszVolume); 7586 StringCbPrintfW (szTmp, sizeof(szTmp), GetString ("CONFIRM_VOL_HEADER_BAK"), lpszVolume);
7564 7587
7565 if (bRequireConfirmation 7588 if (bRequireConfirmation
7566 && (MessageBoxW (hwndDlg, szTmp, lpszTitle, YES_NO|MB_ICONQUESTION|MB_DEFBUTTON1) == IDNO)) 7589 && (MessageBoxW (hwndDlg, szTmp, lpszTitle, YES_NO|MB_ICONQUESTION|MB_DEFBUTTON1) == IDNO))
@@ -7672,7 +7695,7 @@ error:
7672} 7695}
7673 7696
7674 7697
7675int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume) 7698int RestoreVolumeHeader (HWND hwndDlg, const char *lpszVolume)
7676{ 7699{
7677 int nDosLinkCreated = -1, nStatus = ERR_OS_ERROR; 7700 int nDosLinkCreated = -1, nStatus = ERR_OS_ERROR;
7678 char szDiskFile[TC_MAX_PATH], szCFDevice[TC_MAX_PATH]; 7701 char szDiskFile[TC_MAX_PATH], szCFDevice[TC_MAX_PATH];
@@ -7691,6 +7714,13 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
7691 LARGE_INTEGER headerOffset; 7714 LARGE_INTEGER headerOffset;
7692 CRYPTO_INFO *restoredCryptoInfo = NULL; 7715 CRYPTO_INFO *restoredCryptoInfo = NULL;
7693 7716
7717 if (!lpszVolume)
7718 {
7719 nStatus = ERR_OUTOFMEMORY;
7720 handleError (hwndDlg, nStatus);
7721 return nStatus;
7722 }
7723
7694 switch (IsSystemDevicePath (lpszVolume, hwndDlg, TRUE)) 7724 switch (IsSystemDevicePath (lpszVolume, hwndDlg, TRUE))
7695 { 7725 {
7696 case 1: 7726 case 1:
@@ -7750,7 +7780,7 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
7750 // Open the volume using backup header 7780 // Open the volume using backup header
7751 while (TRUE) 7781 while (TRUE)
7752 { 7782 {
7753 strncpy (PasswordDlgVolume, lpszVolume, sizeof (PasswordDlgVolume) - 1); 7783 StringCbCopyA (PasswordDlgVolume, sizeof(PasswordDlgVolume), lpszVolume);
7754 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, FALSE)) 7784 if (!AskVolumePassword (hwndDlg, &VolumePassword, NULL, FALSE))
7755 { 7785 {
7756 nStatus = ERR_SUCCESS; 7786 nStatus = ERR_SUCCESS;
@@ -7806,7 +7836,7 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
7806 { 7836 {
7807 // Restore header from an external backup 7837 // Restore header from an external backup
7808 7838
7809 swprintf (szTmp, GetString ("CONFIRM_VOL_HEADER_RESTORE"), lpszVolume); 7839 StringCbPrintfW (szTmp, sizeof(szTmp), GetString ("CONFIRM_VOL_HEADER_RESTORE"), lpszVolume);
7810 7840
7811 if (MessageBoxW (hwndDlg, szTmp, lpszTitle, YES_NO|MB_ICONWARNING|MB_DEFBUTTON2) == IDNO) 7841 if (MessageBoxW (hwndDlg, szTmp, lpszTitle, YES_NO|MB_ICONWARNING|MB_DEFBUTTON2) == IDNO)
7812 { 7842 {
@@ -7837,13 +7867,13 @@ int RestoreVolumeHeader (HWND hwndDlg, char *lpszVolume)
7837 goto error; 7867 goto error;
7838 } 7868 }
7839 7869
7840 CreateFullVolumePath (szDiskFile, lpszVolume, &bDevice); 7870 CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), lpszVolume, &bDevice);
7841 7871
7842 if (bDevice == FALSE) 7872 if (bDevice == FALSE)
7843 strcpy (szCFDevice, szDiskFile); 7873 StringCbCopyA (szCFDevice, sizeof(szCFDevice), szDiskFile);
7844 else 7874 else
7845 { 7875 {
7846 nDosLinkCreated = FakeDosNameForDevice (szDiskFile, szDosDevice, szCFDevice, FALSE); 7876 nDosLinkCreated = FakeDosNameForDevice (szDiskFile, szDosDevice, sizeof(szDosDevice),szCFDevice, sizeof(szCFDevice),FALSE);
7847 if (nDosLinkCreated != 0) 7877 if (nDosLinkCreated != 0)
7848 goto error; 7878 goto error;
7849 } 7879 }
@@ -8302,12 +8332,12 @@ static BOOL CALLBACK SecurityTokenPreferencesDlgProc (HWND hwndDlg, UINT msg, WP
8302 else 8332 else
8303 { 8333 {
8304 char prevSecurityTokenLibraryPath[MAX_PATH]; 8334 char prevSecurityTokenLibraryPath[MAX_PATH];
8305 strcpy (prevSecurityTokenLibraryPath, SecurityTokenLibraryPath); 8335 StringCbCopyA (prevSecurityTokenLibraryPath, sizeof(prevSecurityTokenLibraryPath), SecurityTokenLibraryPath);
8306 strcpy (SecurityTokenLibraryPath, securityTokenLibraryPath); 8336 StringCbCopyA (SecurityTokenLibraryPath, sizeof(SecurityTokenLibraryPath), securityTokenLibraryPath);
8307 8337
8308 if (!InitSecurityTokenLibrary()) 8338 if (!InitSecurityTokenLibrary())
8309 { 8339 {
8310 strcpy (SecurityTokenLibraryPath, prevSecurityTokenLibraryPath); 8340 StringCbCopyA (SecurityTokenLibraryPath, sizeof(SecurityTokenLibraryPath), prevSecurityTokenLibraryPath);
8311 return 1; 8341 return 1;
8312 } 8342 }
8313 } 8343 }
@@ -8393,7 +8423,7 @@ static BOOL CALLBACK SecurityTokenPreferencesDlgProc (HWND hwndDlg, UINT msg, WP
8393 8423
8394 Info ("SELECT_PKCS11_MODULE_HELP"); 8424 Info ("SELECT_PKCS11_MODULE_HELP");
8395 8425
8396 wsprintfW (browseFilter, L"%ls (*.dll)%c*.dll%c%c", GetString ("DLL_FILES"), 0, 0, 0); 8426 StringCbPrintfW (browseFilter, sizeof(browseFilter), L"%ls (*.dll)%c*.dll%c%c", GetString ("DLL_FILES"), 0, 0, 0);
8397 GetSystemDirectory (systemDir, sizeof (systemDir)); 8427 GetSystemDirectory (systemDir, sizeof (systemDir));
8398 8428
8399 if (BrowseFilesInDir (hwndDlg, "SELECT_PKCS11_MODULE", systemDir, securityTokenLibraryPath, TRUE, FALSE, browseFilter)) 8429 if (BrowseFilesInDir (hwndDlg, "SELECT_PKCS11_MODULE", systemDir, securityTokenLibraryPath, TRUE, FALSE, browseFilter))