📄 creencryptwizard.cpp
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CReEncryptWizard.cpp,v 1.16 2002/11/05 02:10:53 wjb Exp $
____________________________________________________________________________*/
#include "pgpClassesConfig.h"
#include "CFile.h"
#include "CMutex.h"
#include "CSecureString.h"
#include "CThread.h"
#include "CComboBox.h"
#include "CButton.h"
#include "CDC.h"
#include "CEdit.h"
#include "CUTF8Edit.h"
#include "CIcon.h"
#include "CImageList.h"
#include "CMessageBox.h"
#include "CPath.h"
#include "CPoint.h"
#include "CProgressBar.h"
#include "CRect.h"
#include "CStatic.h"
#include "UModuleInstance.h"
#include "Crypto.h"
#include "UCommonStrings.h"
#include "CPGPclPrefs.h"
#include "CPGPdiskEngine.h"
#include "CPGPGlobalRandomPool.h"
#include "CAlgorithmCombo.h"
#include "CReEncryptWizard.h"
#include "CPassphraseDialog.h"
#include "CPercentDone.h"
#include "CPGPdiskPage.h"
#include "CRandomDataPage.h"
#include "ImageIDs.h"
#include "PGPdiskHelp.h"
#include "Resource.h"
_USING_PGP
_UNNAMED_BEGIN
// Constants
DWORD ReEncryptWizAlgoPageHelpIDs[] =
{
IDC_DISKSTATIC1, -1,
IDC_DISKSTATIC2, -1,
IDC_HEADING, -1,
IDC_CURALGO_CAPTION, IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_CURALGO,
IDC_CURALGO_EDIT, IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_CURALGO,
IDC_ALGO_CAPTION, IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_NEWALGO,
IDC_ALGO_COMBO, IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_NEWALGO,
IDC_SAMEALGO_CHECK, IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_SAMEALGO,
0, 0
};
DWORD ReEncryptWizReEncryptPageHelpIDs[] =
{
IDC_DISKSTATIC1, -1,
IDC_DISKSTATIC2, -1,
IDC_DISKSTATIC3, -1,
IDC_DISKSTATIC4, -1,
IDC_DISKSTATIC5, -1,
IDC_HEADING, -1,
IDC_CURTASK_CAPTION, IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK,
IDC_CURTASK_TEXT, IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK,
IDC_CURTASK_BAR, IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK,
0, 0
};
DWORD ReEncryptWizDonePageHelpIDs[] =
{
IDC_DISKSTATIC1, -1,
IDC_DISKSTATIC2, -1,
IDC_HEADING, -1,
IDC_SIDEBAR, -1,
0, 0
};
DWORD ReEncryptWizIntroPageHelpIDs[] =
{
IDC_DISKSTATIC1, -1,
IDC_DISKSTATIC2, -1,
IDC_HEADING, -1,
IDC_SIDEBAR, -1,
0, 0
};
// Types
struct ReEncryptInfo
{
CComboError error;
const CPGPdiskContext *pContext;
CPGPdiskDisk *pDisk;
const CSecureString *pPassphrase;
PGPBoolean resumingConversion;
PGPBoolean *pReEncryptionBegun;
CPGPGlobalRandomPool *pRandomPool;
PGPdiskEncryptionAlgorithm algorithm;
};
// Class CReEncryptWizAlgoPage
class CReEncryptWizAlgoPage : public CPGPdiskPage
{
public:
CReEncryptWizAlgoPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
{
pgpAssertAddrValid(pInfo, ReEncryptInfo);
}
~CReEncryptWizAlgoPage()
{
}
PGPUInt16 GetDialogId() const
{
return IDD_REWIZ_ALGO;
}
void SavePrefs();
private:
CAlgorithmCombo mAlgoCombo;
CButton mSameAlgoCheck;
CUTF8Edit mCurAlgoEdit;
ReEncryptInfo *mPInfo;
PGPBoolean mSameAlgoValue;
PGPdiskEncryptionAlgorithm mPrevChoice;
DWORD GetPageHelpId() const {return IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE;}
PVOID GetPageHelpIds() const {return ReEncryptWizAlgoPageHelpIDs;}
void InitControls();
void OnSameAlgoCheck();
BOOL OnCommand(PGPUInt16 notifyCode, PGPUInt16 itemId, HWND ctrl);
BOOL OnInitDialog(HWND focusCtrl);
PGPInt32 OnPsnSetActive();
PGPInt32 OnPsnWizNext();
};
// Class CReEncryptWizReEncryptPage
class CReEncryptWizReEncryptPage : public CPGPdiskPage
{
private:
enum {WM_CONVERT_DONE = WM_USER + 10};
public:
CReEncryptWizReEncryptPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
{
pgpAssertAddrValid(pInfo, ReEncryptInfo);
}
~CReEncryptWizReEncryptPage()
{
}
PGPUInt16 GetDialogId() const
{
return IDD_REWIZ_REENCRYPT;
}
private:
CIcon mDoingIcon;
CIcon mDoneIcon;
CIcon mFailedIcon;
CImageList mImages;
CProgressBar mCurTaskBar;
CStatic mCurTaskText;
CStatic mTaskIcon1;
ReEncryptInfo *mPInfo;
CPath mFileName;
CThread mReEncryptThread;
CMutex mCancelMutex;
PGPBoolean mShouldCancel;
DWORD GetPageHelpId() const
{
return IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE;
}
PVOID GetPageHelpIds() const {return ReEncryptWizReEncryptPageHelpIDs;}
PGPBoolean ReEncryptStatusCallbackAux(PGPUInt32 percent);
static PGPBoolean ReEncryptStatusCallback(PGPUInt32 percent,
void *userVal);
void ReEncryptCallbackAux();
static void _cdecl ReEncryptCallback(void *userVal);
void InitImages();
void OnReEncryptDone();
BOOL OnInitDialog(HWND focusCtrl);
PGPBoolean OnPsnQueryCancel();
PGPInt32 OnPsnSetActive();
PGPBoolean PreProcess(const CMessage& msg, LRESULT& result);
};
// Class CReEncryptWizDonePage
class CReEncryptWizDonePage : public CPGPdiskPage
{
public:
CReEncryptWizDonePage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
{
pgpAssertAddrValid(pInfo, ReEncryptInfo);
}
~CReEncryptWizDonePage()
{
}
PGPUInt16 GetDialogId() const
{
return IDD_REWIZ_DONE;
}
private:
ReEncryptInfo *mPInfo;
DWORD GetPageHelpId() const {return IDH_PGPDISKUI_REENCRYPTWIZDONEPAGE;}
PVOID GetPageHelpIds() const {return ReEncryptWizDonePageHelpIDs;}
PGPInt32 OnPsnSetActive();
};
// Class CReEncryptWizIntroPage
class CReEncryptWizIntroPage : public CPGPdiskPage
{
public:
CReEncryptWizIntroPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
{
pgpAssertAddrValid(pInfo, ReEncryptInfo);
}
~CReEncryptWizIntroPage()
{
}
PGPUInt16 GetDialogId() const
{
return IDD_REWIZ_INTRO;
}
private:
ReEncryptInfo *mPInfo;
DWORD GetPageHelpId() const
{
return IDH_PGPDISKUI_REENCRYPTWIZINTROPAGE;
}
PVOID GetPageHelpIds() const {return ReEncryptWizIntroPageHelpIDs;}
BOOL OnInitDialog(HWND focusCtrl);
PGPInt32 OnPsnSetActive();
};
// Class CReEncryptWizAlgoPage member functions
void
CReEncryptWizAlgoPage::SavePrefs()
{
// Select last-used algorithm.
CPGPclPrefs prefs(mPInfo->pContext->PGPclPrefs());
prefs.SetNumber(kPGPPrefDiskLastAlgorithm, mPInfo->algorithm);
}
_UNNAMED_END
// Class CReEncryptWizAlgoPage member functions
void
CReEncryptWizAlgoPage::InitControls()
{
mSameAlgoValue = FALSE;
mSameAlgoCheck.SetCheck(BST_UNCHECKED);
// Display existing algorithm in static edit box.
CString curAlgoText;
CPGPdiskEngine::GetDiskAlgorithmIdString(mPInfo->algorithm, curAlgoText);
mCurAlgoEdit.SetWindowText(curAlgoText);
// Fill in combo box.
mAlgoCombo.Fill();
// Don't display existing algorithm in combo box.
mAlgoCombo.Remove(mPInfo->algorithm);
// Select last-used algorithm.
CPGPclPrefs prefs(mPInfo->pContext->PGPclPrefs());
mAlgoCombo.Set(static_cast<PGPdiskEncryptionAlgorithm>(
prefs.GetNumber(kPGPPrefDiskLastAlgorithm)));
// Disable re-encryption to old CAST algorithm.
if (mPInfo->algorithm == kPGPdiskOldCAST5Algorithm)
mSameAlgoCheck.EnableWindow(FALSE);
}
void
CReEncryptWizAlgoPage::OnSameAlgoCheck()
{
if (mSameAlgoCheck.GetCheck() == BST_CHECKED)
{
mSameAlgoValue = TRUE;
mPrevChoice = mAlgoCombo.Get();
mAlgoCombo.Add(mPInfo->algorithm);
mAlgoCombo.Set(mPInfo->algorithm);
mAlgoCombo.EnableWindow(FALSE);
}
else
{
mSameAlgoValue = FALSE;
mAlgoCombo.Remove(mPInfo->algorithm);
mAlgoCombo.Set(mPrevChoice);
mAlgoCombo.EnableWindow(TRUE);
}
}
BOOL
CReEncryptWizAlgoPage::OnCommand(
PGPUInt16 notifyCode,
PGPUInt16 itemId,
HWND ctrl)
{
if (notifyCode == BN_CLICKED)
{
switch (itemId)
{
case IDC_SAMEALGO_CHECK:
OnSameAlgoCheck();
return TRUE;
}
}
return CPGPdiskPage::OnCommand(notifyCode, itemId, ctrl);
}
BOOL
CReEncryptWizAlgoPage::OnInitDialog(HWND focusCtrl)
{
CPGPdiskPage::OnInitDialog(focusCtrl);
// Attach controls.
mSameAlgoCheck.Subclass(GetDlgItem(IDC_SAMEALGO_CHECK));
mAlgoCombo.Subclass(GetDlgItem(IDC_ALGO_COMBO));
mCurAlgoEdit.Subclass(GetDlgItem(IDC_CURALGO_EDIT));
// Prepare controls.
InitControls();
return TRUE;
}
PGPInt32
CReEncryptWizAlgoPage::OnPsnSetActive()
{
PGPInt32 result = CPGPdiskPage::OnPsnSetActive();
if (result != 0)
return result;
SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
mCurAlgoEdit.SetSel(-1, -1);
return 0;
}
PGPInt32
CReEncryptWizAlgoPage::OnPsnWizNext()
{
PGPInt32 result = CPGPdiskPage::OnPsnWizNext();
if (result != 0)
return result;
if (!mSameAlgoValue)
mPInfo->algorithm = mAlgoCombo.Get();
SavePrefs();
return 0;
}
// Class CReEncryptWizReEncryptPage member functions
PGPBoolean
CReEncryptWizReEncryptPage::ReEncryptStatusCallbackAux(PGPUInt32 percent)
{
mCurTaskBar.SetPosWTimeout(percent, 1000);
mCancelMutex.Enter();
mCancelMutex.Leave();
return !mShouldCancel;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -