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

📄 cpgpdiskcontext.cpp

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

        $Id: CPGPdiskContext.cpp,v 1.25 2002/11/14 22:23:18 wjb Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "pgpBuild.h"
#include "pgpClientErrors.h"

#include "CPGPKey.h"

#include "CDriverComm.h"
#include "CEngineSubsystems.h"
#include "CPGPdiskContext.h"
#include "CPGPdiskDisk.h"
#include "CPGPdiskDiskSet.h"

#include "pgplnlib.h"

_USING_PGP


// Class CPGPdiskContext member functions

CPGPdiskContext::CPGPdiskContext()
{
	mKeyDBModified=TRUE; 

	mPGPContext.Create();
	PGPlnLicenseCheck(mPGPContext);
}

const CPGPclPrefs& 
CPGPdiskContext::PGPclPrefs() const
{
	mPGPclPrefs.Open();
	return mPGPclPrefs;
}

// Added PGPSetNotificationCallback support so we only
// reload the keydb when things change -wjb
void diskContextUpdateProc (
		PGPUserValue			userval,
		PGPNotificationReason	reason,
		PGPUInt32				uParam1,
		PGPUInt32				uParam2)
{
	if (reason == kPGPNotification_KeyDBChanged)
	{
		PGPBoolean *pmKeyDBModified;

		pmKeyDBModified=(PGPBoolean *)userval;

		*pmKeyDBModified=TRUE;
	}
}

const CPGPKeyDB& 
CPGPdiskContext::PGPKeyDB() const
{
	// Open default key DB and keyset on that DB on demand.
	if (!mPGPKeyDB.WeCreated())
	{
		mKeyDBModified=TRUE; // wjb
		ReloadPGPKeyDB();
		PGPSetNotificationCallback(diskContextUpdateProc,&mKeyDBModified); //wjb
	}

	return mPGPKeyDB;
}

PGPBoolean 
CPGPdiskContext::IsTherePGPdiskADK() const
{
	PGPBoolean	isThereADK;

	if(PGPclEnterprise())
	{
		isThereADK = PGPclPrefs().GetBoolean(kPGPPrefUsePGPdiskADK);
	}
	else
	{
		return FALSE;
	}

	return isThereADK;
}

void 
CPGPdiskContext::GetPGPdiskADKPubKey(CPGPKey& adkKey) const
{
	if(PGPclEnterprise())
	{
		// Get ADK key ID.
		CPGPData	keyIDData;
		PGPclPrefs().GetData(kPGPPrefPGPdiskADKKeyID, keyIDData);

		CPGPKeyID	adkKeyID(*static_cast<PGPKeyID *>(keyIDData.Get()));

		// Get ADK key.
		adkKey.FindKeyByKeyID(PGPKeyDB(), adkKeyID);
	}
	else
	{
		THROW_PGPERROR(kPGPClientError_DiskAdkFuncOnPersonalBuild);
	}
}

void 
CPGPdiskContext::GetPGPdiskADKUserID(CString& userID) const
{
	if(PGPclEnterprise())
	{
		CPGPKey	adkKey;
		GetPGPdiskADKPubKey(adkKey);

		adkKey.GetPrimaryUserIDName(userID);
	}
	else
	{
		THROW_PGPERROR(kPGPClientError_DiskAdkFuncOnPersonalBuild);
	}
}

void 
CPGPdiskContext::UpdateDiskSet(CPGPdiskDiskSet& diskSet) const
{
	PGPdiskInfo	disks[kPGPdiskMaxMountedDisks];
	PGPUInt32	numFilled;

	CEngineSubsystems::DriverComm().QueryAllMounted(disks, 
		kPGPdiskMaxMountedDisks, numFilled);

	diskSet.Empty();

	for (PGPUInt32 i = 0; i < numFilled; i++)
	{
		auto_ptr<CPGPdiskDisk>	pNewDisk(new CPGPdiskDisk);

		pNewDisk->AttachMounted(this, disks[i].path, disks[i].root, 
			 disks[i].deviceName, disks[i].isReadOnly, disks[i].hasTimedOut);
		diskSet.AddMounted(*pNewDisk.get());
	}
}

void 
CPGPdiskContext::ReloadPGPKeyDB() const
{
	if(!mKeyDBModified)
		return;

	mKeyDBModified=FALSE;

	// Open default key DB
	try
	{
		mPGPKeyDB.OpenDefault(mPGPContext);
	}
	catch (CComboError& error)
	{
		switch (error.pgpErr)
		{
		case kPGPError_CantOpenFile:
		case kPGPError_FileNotFound:
			if (PGPclPreferences(PGPContext(), NULL, 
				kPGPclKeyringPrefs, NULL) != kPGPError_NoErr)
			{
				throw;
			}
			else
			{
				mPGPKeyDB.OpenDefault(mPGPContext);
			}
			break;

		default:
			throw;
		}
	}
}

⌨️ 快捷键说明

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