📄 cnewuserwizard.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 + -