📄 tcformat.c
字号:
wcscat (nonSysInplaceEncUIStatus, L" ");
SetWindowTextW (GetDlgItem (hCurPage, IDC_WRITESPEED), nonSysInplaceEncUIStatus);
}
void UpdateNonSysInPlaceEncControls (void)
{
EnableWindow (GetDlgItem (hCurPage, IDC_WIPE_MODE), !(bVolTransformThreadRunning || bVolTransformThreadToRun));
SetWindowTextW (GetDlgItem (hCurPage, IDC_PAUSE),
GetString ((bVolTransformThreadRunning || bVolTransformThreadToRun) ? "IDC_PAUSE" : "RESUME"));
SetWindowTextW (GetDlgItem (MainDlg, IDCANCEL), GetString (bInPlaceEncNonSysResumed ? "DEFER" : "CANCEL"));
EnableWindow (GetDlgItem (hCurPage, IDC_PAUSE), bFirstNonSysInPlaceEncResumeDone
&& NonSysInplaceEncStatus != NONSYS_INPLACE_ENC_STATUS_FINALIZING
&& NonSysInplaceEncStatus != NONSYS_INPLACE_ENC_STATUS_FINISHED);
EnableWindow (GetDlgItem (MainDlg, IDC_NEXT), !(bVolTransformThreadRunning || bVolTransformThreadToRun) && !bFirstNonSysInPlaceEncResumeDone);
EnableWindow (GetDlgItem (MainDlg, IDC_PREV), !(bVolTransformThreadRunning || bVolTransformThreadToRun) && !bInPlaceEncNonSysResumed);
EnableWindow (GetDlgItem (MainDlg, IDCANCEL),
!(bVolTransformThreadToRun
|| NonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_PREPARING
|| NonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_RESIZING
|| NonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_FINALIZING
|| NonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_FINISHED));
if (bVolTransformThreadRunning || bVolTransformThreadToRun)
{
switch (NonSysInplaceEncStatus)
{
case NONSYS_INPLACE_ENC_STATUS_PREPARING:
case NONSYS_INPLACE_ENC_STATUS_RESIZING:
case NONSYS_INPLACE_ENC_STATUS_FINALIZING:
ArrowWaitCursor ();
break;
case NONSYS_INPLACE_ENC_STATUS_ENCRYPTING:
NormalCursor ();
break;
default:
NormalCursor ();
break;
}
if (bVolTransformThreadCancel)
WaitCursor ();
}
else
{
NormalCursor ();
if (bInPlaceEncNonSysResumed)
{
SetNonSysInplaceEncUIStatus (NONSYS_INPLACE_ENC_STATUS_PAUSED);
}
else
SetWindowText (GetDlgItem (hCurPage, IDC_WRITESPEED), " ");
SetWindowText (GetDlgItem (hCurPage, IDC_TIMEREMAIN), " ");
}
ShowNonSysInPlaceEncUIStatus ();
UpdateNonSysInplaceEncProgressBar ();
}
static void UpdateNonSysInplaceEncProgressBar (void)
{
static int lastNonSysInplaceEncStatus = NONSYS_INPLACE_ENC_STATUS_NONE;
int nonSysInplaceEncStatus = NonSysInplaceEncStatus;
__int64 totalSectors;
totalSectors = NonSysInplaceEncTotalSectors;
if (bVolTransformThreadRunning
&& (nonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_ENCRYPTING
|| nonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_FINALIZING
|| nonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_FINISHED))
{
if (lastNonSysInplaceEncStatus != nonSysInplaceEncStatus
&& nonSysInplaceEncStatus == NONSYS_INPLACE_ENC_STATUS_ENCRYPTING)
{
InitNonSysInplaceEncProgressBar ();
}
else
{
if (totalSectors <= 0 && nVolumeSize > 0)
totalSectors = nVolumeSize / SECTOR_SIZE;
if (totalSectors > 0)
UpdateProgressBarProc (NonSysInplaceEncBytesDone / SECTOR_SIZE);
}
}
ShowNonSysInPlaceEncUIStatus ();
lastNonSysInplaceEncStatus = nonSysInplaceEncStatus;
}
static void InitNonSysInplaceEncProgressBar (void)
{
__int64 totalSectors = NonSysInplaceEncTotalSectors;
if (totalSectors <= 0)
{
if (nVolumeSize <= 0)
return;
totalSectors = nVolumeSize / SECTOR_SIZE;
}
InitProgressBar (totalSectors,
NonSysInplaceEncBytesDone,
FALSE,
TRUE,
TRUE,
TRUE);
}
void DisplayRandPool (HWND hPoolDisplay, BOOL bShow)
{
unsigned char tmp[4];
unsigned char tmpByte;
int col, row;
static BOOL bRandPoolDispAscii = FALSE;
if (!bShow)
{
SetWindowText (hPoolDisplay, "");
return;
}
RandpeekBytes (randPool, sizeof (randPool));
if (memcmp (lastRandPool, randPool, sizeof(lastRandPool)) != 0)
{
outRandPoolDispBuffer[0] = 0;
for (row = 0; row < RANDPOOL_DISPLAY_ROWS; row++)
{
for (col = 0; col < RANDPOOL_DISPLAY_COLUMNS; col++)
{
tmpByte = randPool[row * RANDPOOL_DISPLAY_COLUMNS + col];
sprintf ((char *) tmp, bRandPoolDispAscii ? ((tmpByte >= 32 && tmpByte < 255 && tmpByte != '&') ? " %c " : " . ") : "%02X ", tmpByte);
strcat ((char *) outRandPoolDispBuffer, (char *) tmp);
}
strcat ((char *) outRandPoolDispBuffer, "\n");
}
SetWindowText (hPoolDisplay, (char *) outRandPoolDispBuffer);
memcpy (lastRandPool, randPool, sizeof(lastRandPool));
}
}
static void WipeAbort (void)
{
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), FALSE);
if (bHiddenOS && IsHiddenOSRunning())
{
/* Decoy system partition wipe */
DecoySystemWipeStatus decoySysPartitionWipeStatus;
try
{
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
}
catch (Exception &e)
{
e.Show (MainDlg);
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
return;
}
if (!decoySysPartitionWipeStatus.WipeInProgress)
{
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
return;
}
WaitCursor ();
try
{
int attempts = SYSENC_PAUSE_RETRIES;
BootEncObj->AbortDecoyOSWipe ();
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
while (decoySysPartitionWipeStatus.WipeInProgress && attempts > 0)
{
Sleep (SYSENC_PAUSE_RETRY_INTERVAL);
attempts--;
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
}
if (!decoySysPartitionWipeStatus.WipeInProgress)
BootEncObj->CheckDecoyOSWipeResult ();
}
catch (Exception &e)
{
e.Show (MainDlg);
}
NormalCursor ();
if (decoySysPartitionWipeStatus.WipeInProgress)
{
SetTimer (MainDlg, TIMER_ID_WIPE_PROGRESS, TIMER_INTERVAL_WIPE_PROGRESS, NULL);
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
Error ("FAILED_TO_INTERRUPT_WIPING");
return;
}
}
else
{
/* Regular device wipe (not decoy system partition wipe) */
}
UpdateWipeControls ();
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
}
static void WipeStart (void)
{
if (bHiddenOS && IsHiddenOSRunning())
{
/* Decoy system partition wipe */
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), FALSE);
bDeviceWipeInProgress = FALSE;
WaitCursor ();
try
{
BootEncObj->StartDecoyOSWipe (nWipeMode);
bDeviceWipeInProgress = TRUE;
}
catch (Exception &e)
{
e.Show (MainDlg);
}
NormalCursor ();
if (!bDeviceWipeInProgress)
{
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
Error ("FAILED_TO_START_WIPING");
return;
}
}
else
{
/* Regular device wipe (not decoy system partition wipe) */
}
InitWipeProgressBar ();
UpdateWipeProgressBar ();
UpdateWipeControls ();
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), TRUE);
SetTimer (MainDlg, TIMER_ID_WIPE_PROGRESS, TIMER_INTERVAL_WIPE_PROGRESS, NULL);
}
static void UpdateWipeProgressBar (void)
{
if (bHiddenOS && IsHiddenOSRunning())
{
/* Decoy system partition wipe */
DecoySystemWipeStatus decoySysPartitionWipeStatus;
try
{
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
BootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
if (decoySysPartitionWipeStatus.WipedAreaEnd == -1)
UpdateProgressBarProc (0);
else
UpdateProgressBarProc ((decoySysPartitionWipeStatus.WipedAreaEnd - BootEncStatus.ConfiguredEncryptedAreaStart + 1) / SECTOR_SIZE);
}
else
{
/* Regular device wipe (not decoy system partition wipe) */
}
}
static void InitWipeProgressBar (void)
{
if (bHiddenOS && IsHiddenOSRunning())
{
/* Decoy system partition wipe */
DecoySystemWipeStatus decoySysPartitionWipeStatus;
try
{
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
BootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
if (BootEncStatus.ConfiguredEncryptedAreaEnd == -1
|| BootEncStatus.ConfiguredEncryptedAreaStart == -1)
return;
InitProgressBar ((BootEncStatus.ConfiguredEncryptedAreaEnd - BootEncStatus.ConfiguredEncryptedAreaStart + 1) / SECTOR_SIZE,
(decoySysPartitionWipeStatus.WipedAreaEnd == BootEncStatus.ConfiguredEncryptedAreaStart || decoySysPartitionWipeStatus.WipedAreaEnd == -1) ?
0 : decoySysPartitionWipeStatus.WipedAreaEnd - BootEncStatus.ConfiguredEncryptedAreaStart + 1,
FALSE,
TRUE,
FALSE,
TRUE);
}
else
{
/* Regular device wipe (not decoy system partition wipe) */
}
}
static void UpdateWipeControls (void)
{
if (bHiddenOS && IsHiddenOSRunning())
{
/* Decoy system partition wipe */
DecoySystemWipeStatus decoySysPartitionWipeStatus;
try
{
decoySysPartitionWipeStatus = BootEncObj->GetDecoyOSWipeStatus();
BootEncStatus = BootEncObj->GetStatus();
}
catch (...)
{
return;
}
EnableWindow (GetDlgItem (MainDlg, IDC_NEXT), !decoySysPartitionWipeStatus.WipeInProgress);
}
else
{
/* Regular device wipe (not decoy system partition wipe) */
EnableWindow (GetDlgItem (MainDlg, IDC_NEXT), bDeviceWipeInProgress);
if (!bDeviceWipeInProgress)
{
SetWindowText (GetDlgItem (hCurPage, IDC_TIMEREMAIN), " ");
}
}
EnableWindow (GetDlgItem (hCurPage, IDC_ABORT_BUTTON), bDeviceWipeInProgress);
EnableWindow (GetDlgItem (MainDlg, IDC_PREV), !bDeviceWipeInProgress);
bConfirmQuit = bDeviceWipeInProgress;
}
static void __cdecl sysEncDriveAnalysisThread (void *hwndDlgArg)
{
// Mark the detection process as 'in progress'
HiddenSectorDetectionStatus = 1;
SaveSettings (NULL);
BroadcastSysEncCfgUpdate ();
try
{
BootEncObj->ProbeRealSystemDriveSize ();
bSysEncDriveAnalysisTimeOutOccurred = FALSE;
}
catch (TimeOut &)
{
bSysEncDriveAnalysisTimeOutOccurred = TRUE;
}
catch (Exception &e)
{
e.Show (NULL);
EndMainDlg (MainDlg);
exit(0);
}
// Mark the detection process as successful
HiddenSectorDetectionStatus = 0;
SaveSettings (NULL);
BroadcastSysEncCfgUpdate ();
// This artificial delay prevents user confusion on systems where the analysis ends almost instantly
Sleep (3000);
bSysEncDriveAnalysisInProgress = FALSE;
}
static void __cdecl volTransformThreadFunction (void *hwndDlgArg)
{
int nStatus;
DWORD dwWin32FormatError;
BOOL bHidden;
HWND hwndDlg = (HWND) hwndDlgArg;
volatile FORMAT_VOL_PARAMETERS *volParams = (FORMAT_VOL_PARAMETERS *) malloc (sizeof(FORMAT_VOL_PARAMETERS));
if (volParams == NULL)
AbortProcess ("ERR_MEM_ALLOC");
VirtualLock ((LPVOID) volParams, sizeof(FORMAT_VOL_PARAMETERS));
bVolTransformThreadRunning = TRUE;
bVolTransformThreadToRun = FALSE;
// Check administrator privileges
if (!IsAdmin () && !IsUacSupported ())
{
if (fileSystem == FILESYS_NTFS)
{
if (MessageBoxW (hwndDlg, GetString ("ADMIN_PRIVILEGES_WARN_NTFS"), lpszTitle, MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2) == IDCANCEL)
goto cancel;
}
if (bDevice)
{
if (MessageBoxW (hwndDlg, GetString ("ADMIN_PRIVILEGES_WARN_DEVICES"), lpszTitle, MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2) == IDCANCEL)
goto cancel;
}
}
if (!bInPlaceEncNonSys)
{
if (!bDevice)
{
int x = _access (szDiskFile, 06);
if (x == 0 || errno != ENOENT)
{
wchar_t szTmp[512];
if (! ((bHiddenVol && !bHiddenVolHost) && errno != EACCES)) // Only ask ask for
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -