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

📄 cnewdiskwizard.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

        $Id: CNewDiskWizard.cpp,v 1.43 2002/11/05 02:10:53 wjb Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"
#include <stdlib.h>

#include "CFile.h"
#include "CMutex.h"
#include "CThread.h"

#include "CDC.h"
#include "CIcon.h"
#include "CImageList.h"
#include "CMessageBox.h"
#include "CPath.h"
#include "CProgressBar.h"
#include "CSaveFileDialog.h"
#include "CUpDownControl.h"
#include "UModuleInstance.h"
#include "USecurity.h"
#include "UWinVersion.h"

#include "pgpClientErrors.h"
#include "UCommonStrings.h"
#include "UFileSys.h"
#include "CPGPclPrefs.h"
#include "CPGPdiskEngine.h"
#include "CPGPGlobalRandomPool.h"
#include "CPGPKey.h"
#include "CPGPKeyDB.h"

#include "PGPdiskUIPriv.h"

#include "CAlgorithmCombo.h"
#include "CCreateScaleCombo.h"
#include "CDriveLetterCombo.h"
#include "CFileSystemCombo.h"
#include "CHelpShower.h"
#include "CNewUserPages.h"
#include "CNewDiskWizard.h"
#include "CPassphraseDialog.h"
#include "CPercentDone.h"
#include "CPGPdiskFormatter.h"
#include "CPGPdiskPage.h"
#include "CRandomDataPage.h"
#include "ImageIDs.h"
#include "PGPdiskHelp.h"
#include "Resource.h"
#include "UEditMount.h"
#include "UMountPoint.h"

#include "CUTF8Edit.h"

_USING_PGP

_UNNAMED_BEGIN

// Constants

const double	kSizeFudgeFraction	= 0.95;

enum
{
	kScaleStepFactor	= 10
};

DWORD	NewDiskWizADKPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_HEADING,			-1, 
	IDC_ADK_CAPTION,		IDH_PGPDISKUI_DISKWIZADKPAGE_ADKUSERID, 
	IDC_ADK_EDIT,			IDH_PGPDISKUI_DISKWIZADKPAGE_ADKUSERID, 
	0,						0
};

DWORD	NewDiskWizCreationPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DISKSTATIC4,		-1, 
	IDC_DISKSTATIC5,		-1, 
	IDC_HEADING,			-1, 
	IDC_TASKICON1,			-1, 
	IDC_TASKICON2,			-1, 
	IDC_CURTASK_CAPTION,	IDH_PGPDISKUI_DISKWIZCREATEPAGE_CURTASK, 
	IDC_CURTASK_TEXT,		IDH_PGPDISKUI_DISKWIZCREATEPAGE_CURTASK, 
	IDC_CURTASK_BAR,		IDH_PGPDISKUI_DISKWIZCREATEPAGE_CURTASK, 
	IDC_ALLTASK_CAPTION,	IDH_PGPDISKUI_DISKWIZCREATEPAGE_ALLTASK, 
	IDC_ALLTASK_BAR,		IDH_PGPDISKUI_DISKWIZCREATEPAGE_ALLTASK, 
	0,						0
};

DWORD	NewDiskWizDonePageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DISKSTATIC4,		-1, 
	IDC_DISKSTATIC5,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};

DWORD	NewDiskWizIntroPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DISKSTATIC4,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};

DWORD	NewDiskWizOptionsDlgHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DRIVE_RADIO,		IDH_PGPDISKUI_DISKWIZOPTSDLG_DRIVE, 
	IDC_DRIVE_COMBO,		IDH_PGPDISKUI_DISKWIZOPTSDLG_DRIVE, 
	IDC_DIR_RADIO,			IDH_PGPDISKUI_DISKWIZOPTSDLG_DIR, 
	IDC_DIR_EDIT,			IDH_PGPDISKUI_DISKWIZOPTSDLG_DIR, 
	IDC_BROWSE_BUTTON,		IDH_PGPDISKUI_DISKWIZOPTSDLG_BROWSEDIR, 
	IDC_ALGORITHM_CAPTION,	IDH_PGPDISKUI_DISKWIZOPTSDLG_ALGORITHM, 
	IDC_ALGORITHM_COMBO,	IDH_PGPDISKUI_DISKWIZOPTSDLG_ALGORITHM, 
	IDC_FILESYSTEM_CAPTION,	IDH_PGPDISKUI_DISKWIZOPTSDLG_FILESYSTEM, 
	IDC_FILESYSTEM_COMBO,	IDH_PGPDISKUI_DISKWIZOPTSDLG_FILESYSTEM, 
	IDC_STARTUP_CHECK,		IDH_PGPDISKUI_DISKWIZOPTSDLG_STARTUP, 
	IDOK,					IDH_PGPDISKUI_DISKWIZOPTSDLG_OK, 
	IDCANCEL,				IDH_PGPDISKUI_DISKWIZOPTSDLG_CANCEL, 
	0,						0
};

DWORD	NewDiskWizVolInfoPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DISKSTATIC4,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	IDC_FREESIZE_TEXT,		-1, 
	IDC_PATH_CAPTION,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_PATH, 
	IDC_PATH_EDIT,			IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_PATH, 
	IDC_BROWSE_BUTTON,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_BROWSEPATH, 
	IDC_SIZE_CAPTION,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_SIZE, 
	IDC_SIZE_EDIT,			IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_SIZE, 
	IDC_SIZE_UDCTRL,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_SIZE, 
	IDC_SCALE_COMBO,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_SIZE, 
	IDC_OPTIONS_BUTTON,		IDH_PGPDISKUI_DISKWIZVOLINFOPAGE_ADVOPTS, 
	0,						0
};


// Types

class CNewDiskWizRandomPage;

struct DiskWizardInfo
{
	CComboError	error;

	CNewUserPages	*pNewUserPages;
	CPath			path;
	PGPUInt64		blocks;
	PGPBoolean		mountAtStartup;

	const CPGPdiskContext		*pContext;
	CPGPGlobalRandomPool		*pRandomPool;
	PGPdiskEncryptionAlgorithm	algorithm;
	FileSys::Type				fileSys;

	PGPBoolean	fileCreated;
	CPath		root;

	// Data from CNewUserPages::Finish(...).
	PGPBoolean		userChosePub;
	CPGPKey			pubKey[100];
	PGPUInt32		uNumPubKeys;
	CString			userName;
	CSecureString	securePass;
};


// Class CNewDiskOptionsDialog

class CNewDiskOptionsDialog : public CDialog
{
public:
	CNewDiskOptionsDialog() { }
	~CNewDiskOptionsDialog() { }

	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_OPTIONS_DLG;
	}

	void	Display(HWND parentWnd, PGPUInt64 blocks, 
		PGPdiskEncryptionAlgorithm& algorithm, FileSys::Type& fileSys, 
		PGPUInt8& drive, CPath& mountPoint, PGPBoolean& choseDrive, 
		PGPBoolean& mountStartup);

private:
	CAlgorithmCombo		mAlgoCombo;
	CButton				mBrowseButton;
	CButton				mDriveRadio;
	CButton				mDirRadio;
	CButton				mStartupCheck;
	CDriveLetterCombo	mDriveCombo;
	CUTF8Edit				mDirEdit;
	CFileSystemCombo	mFileSysCombo;

	PGPUInt64	mBlocks;

	PGPdiskEncryptionAlgorithm	mAlgorithm;
	FileSys::Type				mFileSys;

	PGPUInt8	mDrive;
	CPath		mMountPoint;
	PGPBoolean	mChoseDrive;
	PGPBoolean	mMountStartup;

	void	InitControls();

	void	OnBrowseButton();
	void	OnDirCheck();
	void	OnDriveCheck();
	void	OnOk();

	BOOL	OnCommand(PGPUInt16 notifyCode, PGPUInt16 itemId, HWND ctrl);
	void	OnContextMenu(HWND menuWnd, CPoint coords);
	void	OnHelp(HELPINFO *pInfo);
	BOOL	OnInitDialog(HWND focusCtrl);
};


// Class CNewDiskWizADKPage

class CNewDiskWizADKPage : public CPGPdiskPage
{
public:
	CNewDiskWizADKPage(DiskWizardInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, DiskWizardInfo);
	}

	~CNewDiskWizADKPage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_ADK;
	}
	
private:
	DiskWizardInfo	*mPInfo;

	CUTF8Edit	mADKEdit;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_DISKWIZADKPAGE;}
	PVOID	GetPageHelpIds() const {return NewDiskWizADKPageHelpIDs;}

	BOOL		OnInitDialog(HWND focusCtrl);
	PGPInt32	OnPsnSetActive();
};


// Class CNewDiskWizCreationPage

class CNewDiskWizCreationPage : public CPGPdiskPage
{
private:
	enum
	{
		WM_CREATE_HALFWAYDONE	= WM_USER + 10, 
		WM_CREATE_DONE			= WM_USER + 11
	};

public:
	CNewDiskWizCreationPage(DiskWizardInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, DiskWizardInfo);
	}

	~CNewDiskWizCreationPage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_CREATION;
	}
	
private:
	DiskWizardInfo	*mPInfo;

	CIcon			mDoingIcon;
	CIcon			mDoneIcon;
	CIcon			mFailedIcon;
	CImageList		mImages;
	CProgressBar	mCurTaskBar;
	CProgressBar	mAllTaskBar;
	CStatic			mCurTaskText;
	CStatic			mTaskIcon1;
	CStatic			mTaskIcon2;

	CPath	mFileName;
	CThread	mCreateThread;
	CMutex	mCancelMutex;

	PGPBoolean	mShouldCancel;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_DISKWIZCREATEPAGE;}
	PVOID	GetPageHelpIds() const {return NewDiskWizCreationPageHelpIDs;}

	PGPBoolean			CreateStatusCallbackAux(PGPBoolean areFormatting, 
		PGPUInt32 percent);
	static PGPBoolean	CreateStatusCallback(PGPBoolean areFormatting, 
		PGPUInt32 percent, void *userVal);

	void				CreateCallbackAux();
	static void _cdecl	CreateCallback(void *userVal);

	void		InitImages();
	void		OnCreateDone();
	void		OnCreateHalfwayDone();
	BOOL		OnInitDialog(HWND focusCtrl);
	PGPBoolean	OnPsnQueryCancel();
	PGPInt32	OnPsnSetActive();
	PGPInt32	OnPsnWizNext();

	PGPBoolean	PreProcess(const CMessage& msg, LRESULT& result);
};


// Class CNewDiskWizDonePage

class CNewDiskWizDonePage : public CPGPdiskPage
{
public:
	CNewDiskWizDonePage(DiskWizardInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, DiskWizardInfo);
	}

	~CNewDiskWizDonePage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_DONE;
	}

private:
	DiskWizardInfo	*mPInfo;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_DISKWIZDONEPAGE;}
	PVOID	GetPageHelpIds() const {return NewDiskWizDonePageHelpIDs;}

	PGPInt32	OnPsnSetActive();
};


// Class CNewDiskWizIntroPage

class CNewDiskWizIntroPage : public CPGPdiskPage
{
public:
	CNewDiskWizIntroPage(DiskWizardInfo *pInfo) : mPInfo(pInfo)
	{
		  pgpAssertAddrValid(pInfo, DiskWizardInfo);
	}

	~CNewDiskWizIntroPage()
	{
	}
	
	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_INTRO;
	}

private:
	DiskWizardInfo	*mPInfo;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_DISKWIZINTROPAGE;}
	PVOID	GetPageHelpIds() const {return NewDiskWizIntroPageHelpIDs;}

	BOOL		OnInitDialog(HWND focusCtrl);
	PGPInt32	OnPsnSetActive();
};


// Class CNewDiskWizVolInfoPage

class CNewDiskWizVolInfoPage : public CPGPdiskPage
{
private:
	enum {kTypicalBlocksHeaders = 8};

public:
	CNewDiskWizVolInfoPage::CNewDiskWizVolInfoPage(DiskWizardInfo *pInfo) : 
	  mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, DiskWizardInfo);
	}

	CNewDiskWizVolInfoPage::~CNewDiskWizVolInfoPage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_DISKWIZ_VOLINFO;
	}

	void	SavePrefs();

private:
	DiskWizardInfo	*mPInfo;

	CButton				mOptionsButton;
	CCreateScaleCombo	mScaleCombo;
	CUTF8Edit				mPathEdit;
	CEdit				mSizeEdit;
	CStatic				mFreeSizeText;
	CUpDownControl		mSizeUDCtrl;

	PGPUInt32					mSizeValue;
	PGPdiskUIPriv::CreateScale	mCreateScale;
	PGPUInt64					mKbSize;

	PGPUInt8	mDrive;
	CPath		mMountPoint;
	PGPBoolean	mChoseDrive;

	PGPUInt64	mKbFree;
	PGPUInt64	mPlatformMaxKbSize;
	PGPUInt64	mPlatformMinKbSize;
	PGPUInt64	mLocalMaxKbSize;
	PGPUInt64	mLocalMinKbSize;

	PGPBoolean	mAreWeFailingDiskFree;
	PGPBoolean	mUserChangedOptions;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_DISKWIZVOLINFOPAGE;}
	PVOID	GetPageHelpIds() const {return NewDiskWizVolInfoPageHelpIDs;}

	void		FormatSizeText(PGPUInt64 kbSize, CString& text) const;
	PGPUInt32	FudgeSizeValue(PGPUInt32 size, 
		PGPBoolean scale = FALSE) const;

	void	SizeScaleToKb(PGPUInt32 sizeValue, 
		PGPdiskUIPriv::CreateScale createScale, PGPUInt64& kbSize);

	void	KbToSizeScale(PGPUInt64 kbSize);

	void	ExportValuesToUI();
	void	ImportValuesFromUI();

	PGPBoolean			SaveDialogValidateCallbackAux(const CPath& path);
	static PGPBoolean	SaveDialogValidateCallback(const CPath& path, 
		void *userVal);

	PGPBoolean	ValidateDiskPath();

	PGPBoolean	FixWarnOptions(PGPBoolean silently = FALSE);
	PGPBoolean	FixWarnSizeAndScale(PGPBoolean silently = FALSE);
	void		UpdateMinMaxSizeFromPath(const CPath& path);
	void		InitControls();

	void	OnOptionsButton();
	void	OnBrowseButton();

	BOOL		OnCommand(PGPUInt16 notifyCode, PGPUInt16 itemId, HWND ctrl);
	BOOL		OnInitDialog(HWND focusCtrl);
	PGPInt32	OnPsnSetActive();
	PGPInt32	OnPsnWizNext();
};

_UNNAMED_END

// Class CNewDiskOptionsDialog member functions

void 
CNewDiskOptionsDialog::Display(
	HWND						parentWnd, 
	PGPUInt64					blocks, 
	PGPdiskEncryptionAlgorithm&	algorithm, 
	FileSys::Type&				fileSys, 
	PGPUInt8&					drive, 
	CPath&						mountPoint, 
	PGPBoolean&					choseDrive, 
	PGPBoolean&					mountStartup)
{
	mBlocks			= blocks;
	mAlgorithm		= algorithm;
	mFileSys		= fileSys;
	mDrive			= drive;
	mMountPoint		= mountPoint;
	mChoseDrive		= choseDrive;
	mMountStartup	= mountStartup;

	CreateModal(parentWnd);

	algorithm		= mAlgorithm;
	fileSys			= mFileSys;
	drive			= mDrive;
	mountPoint		= mMountPoint;
	choseDrive		= mChoseDrive;
	mountStartup	= mMountStartup;
}

void 
CNewDiskOptionsDialog::InitControls()
{
	mAlgoCombo.Fill();
	mAlgoCombo.Set(mAlgorithm);

	mDriveCombo.Fill();
	mDriveCombo.Set(mDrive);

	mFileSysCombo.Fill(mBlocks);
	mFileSysCombo.Set(mFileSys);

	mStartupCheck.SetCheck(mMountStartup ? BST_CHECKED : BST_UNCHECKED);

⌨️ 快捷键说明

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