From 4d7dc3ba25f562bea4be8898f11a97e911c48b99 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Tue, 25 Aug 2015 11:42:01 +0200 Subject: Windows: first implementation of CLI support for creating volumes. --- src/Common/Crypto.c | 4 ++-- src/Common/Format.c | 24 +++++++++++++++--------- src/Common/Format.h | 4 +++- src/Common/Language.xml | 11 ++++++++++- src/Common/Password.c | 6 +++--- src/Common/Password.h | 2 +- 6 files changed, 34 insertions(+), 17 deletions(-) (limited to 'src/Common') diff --git a/src/Common/Crypto.c b/src/Common/Crypto.c index 0c4d59d1..ead091db 100644 --- a/src/Common/Crypto.c +++ b/src/Common/Crypto.c @@ -450,8 +450,8 @@ int EAGetByName (char *name) do { - EAGetName (n, ea, 0); - if (strcmp (n, name) == 0) + EAGetName (n, ea, 1); + if (_stricmp (n, name) == 0) return ea; } while (ea = EAGetNext (ea)); diff --git a/src/Common/Format.c b/src/Common/Format.c index fe1f271f..3fede6d5 100644 --- a/src/Common/Format.c +++ b/src/Common/Format.c @@ -284,7 +284,7 @@ begin_format: dev = CreateFile (devName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (dev != INVALID_HANDLE_VALUE) { - if (IDNO == MessageBoxW (volParams->hwndDlg, GetString ("DEVICE_IN_USE_FORMAT"), lpszTitle, MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2)) + if (!volParams->bForceOperation && (Silent || (IDNO == MessageBoxW (volParams->hwndDlg, GetString ("DEVICE_IN_USE_FORMAT"), lpszTitle, MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2)))) { nStatus = ERR_DONT_REPORT; goto error; @@ -381,7 +381,7 @@ begin_format: bTimeStampValid = TRUE; } - KillTimer (volParams->hwndDlg, TIMER_ID_RANDVIEW); + if (volParams->hwndDlg && volParams->bGuiMode) KillTimer (volParams->hwndDlg, TIMER_ID_RANDVIEW); /* Volume header */ @@ -618,8 +618,11 @@ error: if (driveNo == -1) { - MessageBoxW (volParams->hwndDlg, GetString ("NO_FREE_DRIVES"), lpszTitle, ICON_HAND); - MessageBoxW (volParams->hwndDlg, GetString ("FORMAT_NTFS_STOP"), lpszTitle, ICON_HAND); + if (!Silent) + { + MessageBoxW (volParams->hwndDlg, GetString ("NO_FREE_DRIVES"), lpszTitle, ICON_HAND); + MessageBoxW (volParams->hwndDlg, GetString ("FORMAT_NTFS_STOP"), lpszTitle, ICON_HAND); + } nStatus = ERR_NO_FREE_DRIVES; goto fv_end; @@ -634,20 +637,23 @@ error: if (MountVolume (volParams->hwndDlg, driveNo, volParams->volumePath, volParams->password, volParams->pkcs5, volParams->pim, FALSE, FALSE, TRUE, &mountOptions, FALSE, TRUE) < 1) { - MessageBoxW (volParams->hwndDlg, GetString ("CANT_MOUNT_VOLUME"), lpszTitle, ICON_HAND); - MessageBoxW (volParams->hwndDlg, GetString ("FORMAT_NTFS_STOP"), lpszTitle, ICON_HAND); + if (!Silent) + { + MessageBoxW (volParams->hwndDlg, GetString ("CANT_MOUNT_VOLUME"), lpszTitle, ICON_HAND); + MessageBoxW (volParams->hwndDlg, GetString ("FORMAT_NTFS_STOP"), lpszTitle, ICON_HAND); + } nStatus = ERR_VOL_MOUNT_FAILED; goto fv_end; } - if (!IsAdmin () && IsUacSupported ()) + if (!Silent && !IsAdmin () && IsUacSupported ()) retCode = UacFormatNtfs (volParams->hwndDlg, driveNo, volParams->clusterSize); else retCode = FormatNtfs (driveNo, volParams->clusterSize); if (retCode != TRUE) { - if (!UnmountVolumeAfterFormatExCall (volParams->hwndDlg, driveNo)) + if (!UnmountVolumeAfterFormatExCall (volParams->hwndDlg, driveNo) && !Silent) MessageBoxW (volParams->hwndDlg, GetString ("CANT_DISMOUNT_VOLUME"), lpszTitle, ICON_HAND); if (dataAreaSize <= TC_MAX_FAT_SECTOR_COUNT * FormatSectorSize) @@ -669,7 +675,7 @@ error: goto fv_end; } - if (!UnmountVolumeAfterFormatExCall (volParams->hwndDlg, driveNo)) + if (!UnmountVolumeAfterFormatExCall (volParams->hwndDlg, driveNo) && !Silent) MessageBoxW (volParams->hwndDlg, GetString ("CANT_DISMOUNT_VOLUME"), lpszTitle, ICON_HAND); } diff --git a/src/Common/Format.h b/src/Common/Format.h index 20346876..3c39bec4 100644 --- a/src/Common/Format.h +++ b/src/Common/Format.h @@ -38,11 +38,13 @@ typedef struct unsigned int clusterSize; BOOL sparseFileSwitch; BOOL quickFormat; - int sectorSize; + DWORD sectorSize; int *realClusterSize; Password *password; int pim; HWND hwndDlg; + BOOL bForceOperation; + BOOL bGuiMode; } FORMAT_VOL_PARAMETERS; diff --git a/src/Common/Language.xml b/src/Common/Language.xml index df2890e4..27d7874e 100644 --- a/src/Common/Language.xml +++ b/src/Common/Language.xml @@ -540,7 +540,16 @@ Note: If you need to securely transfer files from the decoy system to the hidden system, follow these steps:\n1) Start the decoy system.\n2) Save the files to an unencrypted volume or to an outer/normal VeraCrypt volume.\n3) Start the hidden system.\n4) If you saved the files to a VeraCrypt volume, mount it (it will be automatically mounted as read-only).\n5) Copy the files to the hidden system partition or to another hidden volume. Your computer must be restarted.\n\nDo you want to restart it now? An error occurred when obtaining the system encryption status. - Cannot initialize application components for system encryption. + No password specified in the command line. The volume can't be created. + No volume size specified in the command line. The volume can't be created. + The volume file size specified in the command line is incompatible with selected NTFS filesystem. + The volume file size specified in the command line is incompatible with selected FAT32 filesystem. + The filesystem on the target drive doesn't support creating sparse files which is required for dynamic volumes. + Only container files can be created through the command line. + The container file size specified in the command line is greater than the available disk free space. Volume can't be created. + The volume size specified in the command line is too small. The volume can't be created. + The volume size specified in the command line is too big. The volume can't be created. + Cannot initialize application components for system encryption. Failed to initialize the random number generator!\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n%hs, Last Error = 0x%.8X) Windows Crypto API failed!\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n%hs, Last Error = 0x%.8X) Unable to initialize the application. Failed to register the Dialog class. diff --git a/src/Common/Password.c b/src/Common/Password.c index 2dfd5373..8b44e7d5 100644 --- a/src/Common/Password.c +++ b/src/Common/Password.c @@ -113,7 +113,7 @@ BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw) } -BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim, BOOL bForBoot, BOOL bSkipPasswordWarning) +BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim, BOOL bForBoot, BOOL bSkipPasswordWarning, BOOL bSkipPimWarning) { BOOL bCustomPimSmall = ((pim != 0) && (pim < (bForBoot? 98 : 485)))? TRUE : FALSE; if (passwordLength < PASSWORD_LEN_WARNING) @@ -132,7 +132,7 @@ BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim #ifndef _DEBUG else if (bCustomPimSmall) { - if (MessageBoxW (hwndDlg, GetString ("PIM_SMALL_WARNING"), lpszTitle, MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2) != IDYES) + if (!bSkipPimWarning && AskWarnNoYes ("PIM_SMALL_WARNING", hwndDlg) != IDYES) return FALSE; } #endif @@ -140,7 +140,7 @@ BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim if ((pim != 0) && (pim > (bForBoot? 98 : 485))) { // warn that mount/boot will take more time - MessageBoxW (hwndDlg, GetString ("PIM_LARGE_WARNING"), lpszTitle, MB_OK|MB_ICONWARNING); + Warning ("PIM_LARGE_WARNING", hwndDlg); } return TRUE; diff --git a/src/Common/Password.h b/src/Common/Password.h index 04221c48..6523e88d 100644 --- a/src/Common/Password.h +++ b/src/Common/Password.h @@ -38,7 +38,7 @@ typedef struct #if defined(_WIN32) && !defined(TC_WINDOWS_DRIVER) void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled ); -BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim, BOOL bForBoot, BOOL bSkipPasswordWarning); +BOOL CheckPasswordLength (HWND hwndDlg, unsigned __int32 passwordLength, int pim, BOOL bForBoot, BOOL bSkipPasswordWarning, BOOL bSkipPimWarning); BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw); int ChangePwd (const char *lpszVolume, Password *oldPassword, int old_pkcs5, int old_pim, BOOL truecryptMode, Password *newPassword, int pkcs5, int pim, int wipePassCount, HWND hwndDlg); -- cgit v1.2.3