⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creencryptwizard.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

PGPBoolean 
CReEncryptWizReEncryptPage::ReEncryptStatusCallback(
	PGPUInt32	percent, 
	void		*userVal)
{
	CReEncryptWizReEncryptPage	*pPage	= static_cast<
		CReEncryptWizReEncryptPage *>(userVal);
	pgpAssertAddrValid(pPage, CReEncryptWizReEncryptPage);

	return pPage->ReEncryptStatusCallbackAux(percent);
}

void 
CReEncryptWizReEncryptPage::ReEncryptCallbackAux()
{
	try
	{
		CSecureArray<char>	passphrase;
		mPInfo->pPassphrase->Extract(passphrase);

		if (IsntNull(mPInfo->pReEncryptionBegun))
			*mPInfo->pReEncryptionBegun = TRUE;

		mPInfo->pDisk->ReEncryptDisk(passphrase.Get(), mPInfo->algorithm, 
			ReEncryptStatusCallback, this);

		PostMessage(WM_CONVERT_DONE);
	}
	catch (CComboError& error)
	{
		mPInfo->error = error;
		PostMessage(WM_CONVERT_DONE);
	}
}

void 
_cdecl 
CReEncryptWizReEncryptPage::ReEncryptCallback(void *userVal)
{
	CReEncryptWizReEncryptPage	*pPage	= static_cast<
		CReEncryptWizReEncryptPage *>(userVal);
	pgpAssertAddrValid(pPage, CReEncryptWizReEncryptPage);

	pPage->ReEncryptCallbackAux();
}

void 
CReEncryptWizReEncryptPage::InitImages()
{
	// initialize image list
	CDC	dc;
	dc.AttachFromWindow(NULL, TRUE);	// DC for desktop

	PGPUInt32	numBits	= dc.GetDeviceCaps(BITSPIXEL) * 
		dc.GetDeviceCaps(PLANES);

	if (numBits <= 8)
	{
		mImages.Create(CIcon::kSmallIconWidth, CIcon::kSmallIconHeight, 
			ILC_COLOR | ILC_MASK, ImageIDs::kNumImageBitmaps, 0);

		CBitmap	images(UModuleInstance::Get(), 
			MAKEINTRESOURCE(IDB_IMAGES4BIT));
		mImages.AddMasked(images, ImageIDs::kMaskColor);
	}
	else
	{
		mImages.Create(CIcon::kSmallIconWidth, CIcon::kSmallIconHeight, 
			ILC_COLOR24 | ILC_MASK, ImageIDs::kNumImageBitmaps, 0);

		CBitmap	images(UModuleInstance::Get(), 
			MAKEINTRESOURCE(IDB_IMAGES24BIT));
		mImages.AddMasked(images, ImageIDs::kMaskColor);
	}

	// load icons
	mDoingIcon.Attach(
		mImages.GetIcon(ImageIDs::kDoingIcon, ILD_TRANSPARENT), TRUE);
	mDoneIcon.Attach(
		mImages.GetIcon(ImageIDs::kDoneIcon, ILD_TRANSPARENT), TRUE);
	mFailedIcon.Attach(
		mImages.GetIcon(ImageIDs::kFailedIcon, ILD_TRANSPARENT), TRUE);
}

void 
CReEncryptWizReEncryptPage::OnReEncryptDone()
{
	using namespace UCommonStrings;
	mReEncryptThread.KillThread();

	if (mShouldCancel || mPInfo->error.IsError())
	{
		SetWizButtons(0);

		if (mPInfo->error.IsError() && 
			(mPInfo->error.pgpErr != kPGPError_UserAbort))
		{
			ReportError(kTellDiskReEncryptFailed, kReEncryptMsgBoxTitle, 
				mPInfo->error);

			mCurTaskBar.ShowWindow(SW_HIDE);
			mCurTaskText.SetWindowText(Get(kReEncryptProgFailedText));
		}
		else
		{
			mCurTaskText.SetWindowText(Get(kReEncryptProgCanceledText));
		}

		mTaskIcon1.SetIcon(mFailedIcon);
	}
	else
	{
		SetWizButtons(PSWIZB_NEXT);

		mCurTaskText.SetWindowText(Get(kReEncryptProgDoneText));
		mTaskIcon1.SetIcon(mDoneIcon);
		mCurTaskBar.SetPos(100);
	}
}

BOOL 
CReEncryptWizReEncryptPage::OnInitDialog(HWND focusCtrl)
{
	CPGPdiskPage::OnInitDialog(focusCtrl);

	mTaskIcon1.Subclass(GetDlgItem(IDC_TASKICON1));
	mCurTaskBar.Subclass(GetDlgItem(IDC_CURTASK_BAR));
	mCurTaskText.Subclass(GetDlgItem(IDC_CURTASK_TEXT));

	InitImages();

	return TRUE;
}

PGPBoolean 
CReEncryptWizReEncryptPage::OnPsnQueryCancel()
{
	using namespace UCommonStrings;

	if (!mReEncryptThread.IsRunning())
		return FALSE;	// nothing's happening, we're set
	else if (mShouldCancel)
		return TRUE;	// cancel in progress, hold tight

	// Pause the conversion thread, ask user for cancel permission.
	mCancelMutex.Enter();

	CMessageBox	messageBox;
	CMessageBox::Button	result	= messageBox.Display(
		Get(kAskIfCancelReEncrypt), Get(kReEncryptMsgBoxTitle), Handle(), 
		CMessageBox::kQuestionTone, CMessageBox::kYesNoStyle, 
		CMessageBox::kNoButton);

	mShouldCancel = (result == CMessageBox::kYesButton);
	mCancelMutex.Leave();

	if (mShouldCancel && mReEncryptThread.IsRunning())
	{
		mCurTaskText.SetWindowText(Get(kReEncryptProgFailingText));
		mCurTaskBar.SetPos(100);
	}

	return TRUE;
}

PGPInt32 
CReEncryptWizReEncryptPage::OnPsnSetActive()
{
	using namespace UCommonStrings;
	PGPInt32	result	= CPGPdiskPage::OnPsnSetActive();

	if (result != 0)
		return result;

	SetWizButtons(0);

	// init controls
	mCurTaskBar.SetRange(0, 100);
	mCurTaskBar.SetPos(0);

	CPath	path;
	mPInfo->pDisk->GetPath(path);

	CPath	fileName;
	path.GetFileNamePart(mFileName);
	mFileName.RemoveExtension();

	mCurTaskText.FitFormattedTextToWindow(
		Get(kReEncryptProgReEncryptingText), mFileName);
	
	mTaskIcon1.SetIcon(mDoingIcon);

	// start re-encryption
	mReEncryptThread.StartThread();

	try
	{
		mShouldCancel = FALSE;
		mReEncryptThread.PerformAsyncCallback(ReEncryptCallback, this);
	}
	catch (CComboError&)
	{
		mReEncryptThread.KillThread();
		throw;
	}

	return 0;
}

PGPBoolean 
CReEncryptWizReEncryptPage::PreProcess(const CMessage& msg, LRESULT& result)
{
	if (msg.Message() == WM_CONVERT_DONE)
	{
		OnReEncryptDone();
		result = 0;

		return TRUE;
	}

	return FALSE;
}


// Class CReEncryptWizDonePage member functions

PGPInt32 
CReEncryptWizDonePage::OnPsnSetActive()
{
	PGPInt32	result	= CPGPdiskPage::OnPsnSetActive();

	if (result != 0)
		return result;

	SetWizButtons(PSWIZB_FINISH);

	return 0;
}


// Class CReEncryptWizIntroPage member functions

BOOL 
CReEncryptWizIntroPage::OnInitDialog(HWND focusCtrl)
{
	CPGPdiskPage::OnInitDialog(focusCtrl);

	CWindow(GetParent()).Center();

	return FALSE;
}

PGPInt32 
CReEncryptWizIntroPage::OnPsnSetActive()
{
	PGPInt32	result	= CPGPdiskPage::OnPsnSetActive();

	if (result != 0)
		return result;

	if (mPInfo->resumingConversion)
		return IDD_REWIZ_REENCRYPT;

	SetWizButtons(PSWIZB_NEXT);

	return 0;
}


// Class CReEncryptWizard member functions

void 
CReEncryptWizard::Display(
	const CPGPdiskContext&	context, 
	const char				*path, 
	HWND					parentWnd, 
	PGPBoolean				*pReEncryptionBegun)
{
	using namespace UCommonStrings;

	pgpAssertStrValid(path);
	pgpAssert(CWindow(parentWnd).IsWindow());

	if (IsntNull(pReEncryptionBegun))
		*pReEncryptionBegun = FALSE;

	// Open the PGPdisk.
	CPGPdiskDisk	disk;
	disk.Open(context, path);

	// Get admin user.
	CPGPdiskUserSet	diskSet;
	disk.ExportUserSet(diskSet);

	CPGPdiskUserIter	userIter(diskSet);
	CPGPdiskUser		adminUser;

	if (!userIter.FindAdminUser(adminUser))
		THROW_PGPERROR(kPGPError_ItemNotFound);

	// Make sure user wants to remove passphrases and missing public keys.
	CPGPdiskUser	user;
	PGPBoolean		sawAtRiskUser	= FALSE;

	userIter.Rewind();

	while (userIter.Next(user))
	{
		if (!user.IsAdminUser() && (user.HasSymmetricKey() || 
			IsPubNotInRing(user)))
		{
			sawAtRiskUser = TRUE;
		}
	}

	if (sawAtRiskUser)
	{
		CMessageBox	messageBox;
		CMessageBox::Button	result	= messageBox.Display(
			Get(kAskIfNukeSymsAndMissingPubs), 
			Get(kReEncryptMsgBoxTitle), parentWnd, 
			CMessageBox::kWarningTone, CMessageBox::kYesNoStyle, 
			CMessageBox::kNoButton);

		if (result == CMessageBox::kNoButton)
			THROW_PGPERROR(kPGPError_UserAbort);
	}

	// Get passphrase for admin user.
	CPath	fileName;

	CPath(path).GetFileNamePart(fileName);
	fileName.RemoveExtension();

	CPGPdiskUserSet		adminUserSet(adminUser);
	CPassphraseDialog	adminPassDlg;

	adminPassDlg.AskForPassphrase(disk, adminUserSet, parentWnd, adminUser, 
		Get(kSinglePassAdminText), fileName);

	// Create the wizard pages.
	ReEncryptInfo			ciInfo;
	CPGPGlobalRandomPool	randomPool(context.PGPContext());
	const char				*title	= Get(kReEncryptTitle);

	ciInfo.pContext				= &context;
	ciInfo.pDisk				= &disk;
	ciInfo.pPassphrase			= &adminPassDlg.Passphrase();
	ciInfo.resumingConversion	= disk.IsBeingReEncrypted();
	ciInfo.pReEncryptionBegun	= pReEncryptionBegun;
	ciInfo.pRandomPool			= &randomPool;
	ciInfo.algorithm			= disk.Algorithm();

	CReEncryptWizAlgoPage		algoPage(&ciInfo);
	CReEncryptWizReEncryptPage	convertPage(&ciInfo);
	CReEncryptWizDonePage		donePage(&ciInfo);
	CReEncryptWizIntroPage		introPage(&ciInfo);
	CRandomDataPage				randomPage(&ciInfo.algorithm, 
		ciInfo.pRandomPool);

	LoadSidebar();

	algoPage.Create(title);
	randomPage.Create(title);
	convertPage.Create(title);
	donePage.Create(title, FALSE, &mSidebarBitmap, &mSidebarPalette);
	introPage.Create(title, FALSE, &mSidebarBitmap, &mSidebarPalette);

	AddPage(&introPage);
	AddPage(&algoPage);
	AddPage(&randomPage);
	AddPage(&convertPage);
	AddPage(&donePage);

	// Show the wizard.
	CPropertySheet::Create(parentWnd, TRUE);

	// flush prefs
	try
	{
		CPGPclPrefs	prefs(context.PGPclPrefs());
		prefs.Flush();
	}
	catch (CComboError&) { }
}

PGPBoolean 
CReEncryptWizard::IsPubNotInRing(const CPGPdiskUser& user) const
{
	CPGPKeyID	keyID;
	user.GetPGPKeyID(keyID);

	PGPPublicKeyAlgorithm	algorithm	= keyID.Algorithm();

	try
	{
		CPGPdiskContext	context(user.Context());
		CPGPKey	pgpKey(context.PGPKeyDB(), keyID);

		return FALSE;
	}
	catch (CComboError&)
	{
		return TRUE;
	}
}

void 
CReEncryptWizard::LoadSidebar()
{
	CDC	dc;
	dc.AttachFromWindow(NULL);

	PGPUInt32	numBits	= dc.GetDeviceCaps(BITSPIXEL) * 
		dc.GetDeviceCaps(PLANES);

	PGPUInt32	uintRsrc;

	if (numBits <= 1)
		uintRsrc = IDB_SIDEBAR1;
	else if (numBits <= 4)
		uintRsrc = IDB_SIDEBAR4;
	else
		uintRsrc = IDB_SIDEBAR8;

	mSidebarBitmap.CreateWithPalette(UModuleInstance::Get(), 
		MAKEINTRESOURCE(uintRsrc), mSidebarPalette);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -