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

📄 cnewuserwizard.cpp

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

        $Id: CNewUserWizard.cpp,v 1.9 2002/08/06 20:09:23 dallen Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CFile.h"

#include "CDC.h"
#include "CMessageBox.h"
#include "CPath.h"
#include "UModuleInstance.h"

#include "UCommonStrings.h"
#include "CPGPdiskEngine.h"
#include "CPGPKey.h"
#include "CPGPKeyDB.h"

#include "CNewUserPages.h"
#include "CNewUserWizard.h"
#include "CPassphraseDialog.h"
#include "CPGPdiskPage.h"
#include "PGPdiskHelp.h"
#include "Resource.h"

_USING_PGP

_UNNAMED_BEGIN

// Constants

DWORD	NewUserWizDonePageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};

DWORD	NewUserWizIntroPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};


// Class CNewUserWizDonePage

class CNewUserWizDonePage : public CPGPdiskPage
{
public:
	CNewUserWizDonePage(CNewUserPages *pPages) : mPPages(pPages)
	{
		pgpAssertAddrValid(pPages, CNewUserPages);
	}

	~CNewUserWizDonePage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_USERWIZ_DONE;
	}
	
private:
	CNewUserPages	*mPPages;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_USERWIZDONEPAGE;}
	PVOID	GetPageHelpIds() const {return NewUserWizDonePageHelpIDs;}

	PGPInt32	OnPsnSetActive();
};


// Class CNewUserWizIntroPage

class CNewUserWizIntroPage : public CPGPdiskPage
{
public:
	CNewUserWizIntroPage(CNewUserPages *pPages) : mPPages(pPages)
	{
		  pgpAssertAddrValid(pPages, CNewUserPages);
	}

	~CNewUserWizIntroPage()
	{
	}
	
	PGPUInt16	GetDialogId() const
	{
		return IDD_USERWIZ_INTRO;
	}

private:
	CNewUserPages	*mPPages;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_USERWIZINTROPAGE;}
	PVOID	GetPageHelpIds() const {return NewUserWizIntroPageHelpIDs;}

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

_UNNAMED_END

// Class CNewUserWizDonePage private member functions

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

	if (result != 0)
		return result;

	SetWizButtons(PSWIZB_BACK | PSWIZB_FINISH);

	return 0;
}


// Class CNewUserWizIntroPage private member functions

BOOL 
CNewUserWizIntroPage::OnInitDialog(HWND focusCtrl)
{
	CPGPdiskPage::OnInitDialog(focusCtrl);
	CWindow(GetParent()).Center();

	return FALSE;
}

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

	if (result != 0)
		return result;

	SetWizButtons(PSWIZB_NEXT);

	return 0;
}


// Class CNewUserWizard public member functions

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

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

	// Check for read-only.
	CPath	cpath(path);

	PGPBoolean	fileReadOnly	= CFile::IsFileInUse(cpath) || 
		cpath.IsReadOnly();

	if (fileReadOnly)
	{
		CMessageBox	messageBox;
		messageBox.Display(Get(kTellCantModifyDisk), 
			Get(kNewUserMsgBoxTitle), parentWnd);

		THROW_PGPERROR(kPGPError_UserAbort);
	}

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

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

	CPGPdiskUserIter	diskUsersIter(diskUsers);
	CPGPdiskUser		adminUser;

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

	// Get passphrase for admin user.
	CPath	fileName;

	cpath.GetFileNamePart(fileName);
	fileName.RemoveExtension();

	CPGPdiskUserSet		adminUserSet(adminUser);
	CPassphraseDialog	masterPassDlg;

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

	// Create the wizard pages.
	CNewUserPages	newUserPages;
	const char		*title	= Get(kNewUserTitle);

	newUserPages.Create(&context, &diskUsers, title, 
		Get(kNewUserMsgBoxTitle), FALSE, FALSE);

	CNewUserWizDonePage		donePage(&newUserPages);
	CNewUserWizIntroPage	introPage(&newUserPages);

	LoadSidebar();

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

	AddPage(&introPage);
	AddPage(newUserPages.GetAskChoicePage());
	AddPage(newUserPages.GetAskPassPage());
	AddPage(newUserPages.GetBadPassPage());
	AddPage(newUserPages.GetAskPubKeyPage());
	AddPage(&donePage);

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

	CPGPKey			pubKey[100];
	CSecureString	securePass;
	CString			userName;
	PGPBoolean		userChosePub, userChoseRO;
	PGPUInt32		uNumPubKeys;

	// Create and add the new key.
	newUserPages.GetChoices(userChosePub, pubKey, uNumPubKeys, 
		userName, securePass, userChoseRO);

	CPGPdiskUser	newUser[100];

	if (userChosePub)
	{
		PGPUInt32 i;

		for(i=0;i<uNumPubKeys;i++)
		{
			newUser[i].Create(adminUser, pubKey[i], userChoseRO);
			diskUsers.Add(newUser[i]);
		}
	}
	else
	{
		CSecureArray<char>	passphrase;
		securePass.Extract(passphrase);

		newUser[0].Create(adminUser, userName, passphrase.Get(), userChoseRO);
		diskUsers.Add(newUser[0]);
	}

	// Add the user to the PGPdisk.
	disk.ImportUserSet(diskUsers, adminUser);
}

void 
CNewUserWizard::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 + -