📄 tcformat.c
字号:
switch (cnt) // Number of ciphers in the cascade
{
case 2:
swprintf (auxLine, GetString ("TWO_LAYER_CASCADE_HELP"),
CipherGetName (cipherIDs[1]),
CipherGetKeySize (cipherIDs[1])*8,
CipherGetName (cipherIDs[0]),
CipherGetKeySize (cipherIDs[0])*8);
break;
case 3:
swprintf (auxLine, GetString ("THREE_LAYER_CASCADE_HELP"),
CipherGetName (cipherIDs[2]),
CipherGetKeySize (cipherIDs[2])*8,
CipherGetName (cipherIDs[1]),
CipherGetKeySize (cipherIDs[1])*8,
CipherGetName (cipherIDs[0]),
CipherGetKeySize (cipherIDs[0])*8);
break;
}
wcscpy_s (hyperLink, sizeof(hyperLink) / 2, GetString ("IDC_LINK_MORE_INFO_ABOUT_CIPHER"));
SetWindowTextW (GetDlgItem (hwndDlg, IDC_BOX_HELP), auxLine);
}
else
{
// No info available for this encryption algorithm
SetWindowTextW (GetDlgItem (hwndDlg, IDC_BOX_HELP), L"");
}
// Update hyperlink
SetWindowTextW (GetDlgItem (hwndDlg, IDC_LINK_MORE_INFO_ABOUT_CIPHER), hyperLink);
AccommodateTextField (hwndDlg, IDC_LINK_MORE_INFO_ABOUT_CIPHER, FALSE);
}
}
static void VerifySizeAndUpdate (HWND hwndDlg, BOOL bUpdate)
{
BOOL bEnable = TRUE;
char szTmp[50];
__int64 lTmp;
size_t i;
GetWindowText (GetDlgItem (hwndDlg, IDC_SIZEBOX), szTmp, sizeof (szTmp));
for (i = 0; i < strlen (szTmp); i++)
{
if (szTmp[i] >= '0' && szTmp[i] <= '9')
continue;
else
{
bEnable = FALSE;
break;
}
}
if (IsButtonChecked (GetDlgItem (hwndDlg, IDC_KB)))
nMultiplier = BYTES_PER_KB;
else
nMultiplier = BYTES_PER_MB;
if (bDevice && !(bHiddenVol && !bHiddenVolHost)) // If raw device but not a hidden volume
{
lTmp = nVolumeSize;
i = 1;
}
else
{
i = nMultiplier;
lTmp = _atoi64 (szTmp);
}
if (bEnable)
{
if (lTmp * i < (bHiddenVolHost ? MIN_HIDDEN_VOLUME_HOST_SIZE : MIN_VOLUME_SIZE))
bEnable = FALSE;
if (!bHiddenVolHost && bHiddenVol)
{
if (lTmp * i > nMaximumHiddenVolSize)
bEnable = FALSE;
}
else
{
if (lTmp * i > (bHiddenVolHost ? MAX_HIDDEN_VOLUME_HOST_SIZE : MAX_VOLUME_SIZE))
bEnable = FALSE;
}
if (lTmp * i % SECTOR_SIZE != 0)
bEnable = FALSE;
}
if (bUpdate)
{
nUIVolumeSize = lTmp;
if (!bDevice || (bHiddenVol && !bHiddenVolHost)) // Update only if it's not a raw device or if it's a hidden volume
nVolumeSize = i * lTmp;
}
EnableWindow (GetDlgItem (GetParent (hwndDlg), IDC_NEXT), bEnable);
}
static void UpdateWizardModeControls (HWND hwndDlg, int setWizardMode)
{
SendMessage (GetDlgItem (hwndDlg, IDC_FILE_CONTAINER),
BM_SETCHECK,
setWizardMode == WIZARD_MODE_FILE_CONTAINER ? BST_CHECKED : BST_UNCHECKED,
0);
SendMessage (GetDlgItem (hwndDlg, IDC_NONSYS_DEVICE),
BM_SETCHECK,
setWizardMode == WIZARD_MODE_NONSYS_DEVICE ? BST_CHECKED : BST_UNCHECKED,
0);
SendMessage (GetDlgItem (hwndDlg, IDC_SYS_DEVICE),
BM_SETCHECK,
setWizardMode == WIZARD_MODE_SYS_DEVICE ? BST_CHECKED : BST_UNCHECKED,
0);
}
static int GetSelectedWizardMode (HWND hwndDlg)
{
if (IsButtonChecked (GetDlgItem (hwndDlg, IDC_FILE_CONTAINER)))
return WIZARD_MODE_FILE_CONTAINER;
if (IsButtonChecked (GetDlgItem (hwndDlg, IDC_NONSYS_DEVICE)))
return WIZARD_MODE_NONSYS_DEVICE;
if (IsButtonChecked (GetDlgItem (hwndDlg, IDC_SYS_DEVICE)))
return WIZARD_MODE_SYS_DEVICE;
return DEFAULT_VOL_CREATION_WIZARD_MODE;
}
static void RefreshMultiBootControls (HWND hwndDlg)
{
SendMessage (GetDlgItem (hwndDlg, IDC_SINGLE_BOOT),
BM_SETCHECK,
nMultiBoot == 1 ? BST_CHECKED : BST_UNCHECKED,
0);
SendMessage (GetDlgItem (hwndDlg, IDC_MULTI_BOOT),
BM_SETCHECK,
nMultiBoot > 1 ? BST_CHECKED : BST_UNCHECKED,
0);
}
// -1 = Undecided or error, 0 = No, 1 = Yes
static int GetSysEncMultiBootAnswer (void)
{
if (IsButtonChecked (GetDlgItem (hCurPage, IDC_CHOICE1)))
return 1;
if (IsButtonChecked (GetDlgItem (hCurPage, IDC_CHOICE2)))
return 0;
return -1;
}
// 0 = No, 1 = Yes
static void UpdateSysEncMultiBootAnswer (int answer)
{
SendMessage (GetDlgItem (hCurPage, IDC_CHOICE1),
BM_SETCHECK,
answer == 1 ? BST_CHECKED : BST_UNCHECKED,
0);
SendMessage (GetDlgItem (hCurPage, IDC_CHOICE2),
BM_SETCHECK,
answer == 0 ? BST_CHECKED : BST_UNCHECKED,
0);
}
// -1 = Undecided, 0 = No, 1 = Yes
static void InitStdSysEncMultiBootAnswerPage (int answer)
{
SetWindowTextW (GetDlgItem (hCurPage, IDC_CHOICE1), GetString ("UISTR_YES"));
SetWindowTextW (GetDlgItem (hCurPage, IDC_CHOICE2), GetString ("UISTR_NO"));
SetWindowTextW (GetDlgItem (MainDlg, IDC_NEXT), GetString ("NEXT"));
SetWindowTextW (GetDlgItem (MainDlg, IDC_PREV), GetString ("PREV"));
SetWindowTextW (GetDlgItem (MainDlg, IDCANCEL), GetString ("CANCEL"));
EnableWindow (GetDlgItem (MainDlg, IDC_NEXT), answer >= 0);
EnableWindow (GetDlgItem (MainDlg, IDC_PREV), TRUE);
UpdateSysEncMultiBootAnswer (answer);
}
static void UpdateSysEncProgressBar (void)
{
BootEncryptionStatus locBootEncStatus;
static BOOL lastTransformWaitingForIdle = FALSE;
try
{
locBootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
if (locBootEncStatus.EncryptedAreaEnd == -1
|| locBootEncStatus.EncryptedAreaStart == -1)
{
UpdateProgressBarProc (0);
}
else
{
UpdateProgressBarProc ((locBootEncStatus.EncryptedAreaEnd - locBootEncStatus.EncryptedAreaStart + 1) / SECTOR_SIZE);
if (locBootEncStatus.SetupInProgress)
{
wchar_t tmpStr[100];
// Status
if (locBootEncStatus.TransformWaitingForIdle)
wcscpy (tmpStr, GetString ("PROGRESS_STATUS_WAITING"));
else
wcscpy (tmpStr, GetString (SystemEncryptionStatus == SYSENC_STATUS_DECRYPTING ? "PROGRESS_STATUS_DECRYPTING" : "PROGRESS_STATUS_ENCRYPTING"));
wcscat (tmpStr, L" ");
SetWindowTextW (GetDlgItem (hCurPage, IDC_WRITESPEED), tmpStr);
// Remainining time
if (locBootEncStatus.TransformWaitingForIdle)
{
// The estimate cannot be computed correctly when speed is zero
SetWindowTextW (GetDlgItem (hCurPage, IDC_TIMEREMAIN), GetString ("N_A_UISTR"));
}
if (locBootEncStatus.TransformWaitingForIdle != lastTransformWaitingForIdle)
{
if (lastTransformWaitingForIdle)
{
// Estimate of remaining time and other values may have been heavily distorted as the speed
// was zero. Therefore, we're going to reinitialize the progress bar and all related variables.
InitSysEncProgressBar ();
}
lastTransformWaitingForIdle = locBootEncStatus.TransformWaitingForIdle;
}
}
}
}
static void InitSysEncProgressBar (void)
{
BootEncryptionStatus locBootEncStatus;
try
{
locBootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
if (locBootEncStatus.ConfiguredEncryptedAreaEnd == -1
|| locBootEncStatus.ConfiguredEncryptedAreaStart == -1)
return;
InitProgressBar ((locBootEncStatus.ConfiguredEncryptedAreaEnd
- locBootEncStatus.ConfiguredEncryptedAreaStart + 1) / SECTOR_SIZE,
(locBootEncStatus.EncryptedAreaEnd == locBootEncStatus.EncryptedAreaStart || locBootEncStatus.EncryptedAreaEnd == -1) ?
0 : locBootEncStatus.EncryptedAreaEnd - locBootEncStatus.EncryptedAreaStart + 1,
SystemEncryptionStatus == SYSENC_STATUS_DECRYPTING,
TRUE,
TRUE,
TRUE);
}
static void UpdateSysEncControls (void)
{
BootEncryptionStatus locBootEncStatus;
try
{
locBootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
EnableWindow (GetDlgItem (hCurPage, IDC_WIPE_MODE),
!locBootEncStatus.SetupInProgress && SystemEncryptionStatus == SYSENC_STATUS_ENCRYPTING);
SetWindowTextW (GetDlgItem (hCurPage, IDC_PAUSE),
GetString (locBootEncStatus.SetupInProgress ? "IDC_PAUSE" : "RESUME"));
EnableWindow (GetDlgItem (MainDlg, IDC_NEXT), !locBootEncStatus.SetupInProgress && !bFirstSysEncResumeDone);
if (!locBootEncStatus.SetupInProgress)
{
wchar_t tmpStr[100];
wcscpy (tmpStr, GetString ((SysDriveOrPartitionFullyEncrypted (TRUE) || !locBootEncStatus.DriveMounted) ?
"PROGRESS_STATUS_FINISHED" : "PROGRESS_STATUS_PAUSED"));
wcscat (tmpStr, L" ");
// Status
SetWindowTextW (GetDlgItem (hCurPage, IDC_WRITESPEED), tmpStr);
if (SysDriveOrPartitionFullyEncrypted (TRUE) || SystemEncryptionStatus == SYSENC_STATUS_NONE)
{
wcscpy (tmpStr, GetString ("PROCESSED_PORTION_100_PERCENT"));
wcscat (tmpStr, L" ");
SetWindowTextW (GetDlgItem (hCurPage, IDC_BYTESWRITTEN), tmpStr);
}
SetWindowText (GetDlgItem (hCurPage, IDC_TIMEREMAIN), " ");
}
}
static void SysEncPause (void)
{
BootEncryptionStatus locBootEncStatus;
if (CreateSysEncMutex ())
{
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), FALSE);
try
{
locBootEncStatus = BootEncObj->GetStatus();
}
catch (Exception &e)
{
e.Show (MainDlg);
Error ("ERR_GETTING_SYSTEM_ENCRYPTION_STATUS");
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
return;
}
if (!locBootEncStatus.SetupInProgress)
{
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
return;
}
WaitCursor ();
try
{
int attempts = SYSENC_PAUSE_RETRIES;
BootEncObj->AbortSetup ();
locBootEncStatus = BootEncObj->GetStatus();
while (locBootEncStatus.SetupInProgress && attempts > 0)
{
Sleep (SYSENC_PAUSE_RETRY_INTERVAL);
attempts--;
locBootEncStatus = BootEncObj->GetStatus();
}
if (!locBootEncStatus.SetupInProgress)
BootEncObj->CheckEncryptionSetupResult ();
}
catch (Exception &e)
{
e.Show (MainDlg);
}
NormalCursor ();
if (locBootEncStatus.SetupInProgress)
{
SetTimer (MainDlg, TIMER_ID_SYSENC_PROGRESS, TIMER_INTERVAL_SYSENC_PROGRESS, NULL);
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
Error ("FAILED_TO_INTERRUPT_SYSTEM_ENCRYPTION");
return;
}
UpdateSysEncControls ();
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
}
else
Error ("SYSTEM_ENCRYPTION_IN_PROGRESS_ELSEWHERE");
}
static void SysEncResume (void)
{
BootEncryptionStatus locBootEncStatus;
if (CreateSysEncMutex ())
{
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), FALSE);
try
{
locBootEncStatus = BootEncObj->GetStatus();
}
catch (Exception &e)
{
e.Show (MainDlg);
Error ("ERR_GETTING_SYSTEM_ENCRYPTION_STATUS");
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
return;
}
if (locBootEncStatus.SetupInProgress)
{
bSystemEncryptionInProgress = TRUE;
UpdateSysEncControls ();
SetTimer (MainDlg, TIMER_ID_SYSENC_PROGRESS, TIMER_INTERVAL_SYSENC_PROGRESS, NULL);
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), TRUE);
return;
}
bSystemEncryptionInProgress = FALSE;
WaitCursor ();
try
{
switch (SystemEncryptionStatus)
{
case SYSENC_STATUS_ENCRYPTING:
BootEncObj->StartEncryption (nWipeMode);
break;
case SYSENC_STATUS_DECRYPTING:
if (locBootEncStatus.DriveMounted) // If the drive is not encrypted we will just deinstall
BootEncObj->StartDecryption ();
break;
}
bSystemEncryptionInProgress = TRUE;
}
catch (Exception &e)
{
e.Show (MainDlg);
}
NormalCursor ();
if (!bSystemEncryptionInProgress)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -