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

📄 cpgpdiskimp.h

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

        $Id: CPGPdiskImp.h,v 1.6 2002/08/06 20:09:34 dallen Exp $
____________________________________________________________________________*/

#ifndef Included_CPGPdiskImp_h	// [
#define Included_CPGPdiskImp_h

#include "CArray.h"
#include "CFile.h"
#include "CImp.h"
#include "CMutex.h"
#include "CString.h"
#include "CThread.h"
#include "UString.h"

#include "CCipherContext.h"
#include "CPGPdisk.h"
#include "CVolume.h"

_PGP_BEGIN

// Class CPGPdiskImp

class CPGPdiskImp : public CImp
{
	friend class CPGPdisk;

protected:
	enum
	{
		BlocksPerOp		= 32, 
		MaxQueuedIoReqs	= 128
	};

public:
	virtual ~CPGPdiskImp();

protected:
	CPGPdiskImp();

	PGPBoolean	HasInactivityTimedOut() const
	{
		return mHasTimedOut;
	}

	PGPBoolean	IsMounted() const
	{
		return mVolume.IsMounted();
	}

	PGPBoolean	IsUnmounted() const
	{
		return mVolume.IsUnmounted();
	}

	PGPBoolean	IsReadOnly() const
	{
		return mIsReadOnly;
	}

	const char *	Path() const
	{
		return mFile.Path();
	}

	const char *	Root() const
	{
		return mVolume.Root();
	}

	const char *	DeviceName() const
	{
		return mVolume.DeviceName();
	}

	PGPUInt64	TotalBlocks() const
	{
		return mVolume.TotalBlocks();
	}
	
	PGPBoolean	HasOpenFiles()
	{
		return mVolume.HasOpenFiles();
	}
	
	void		FlipContexts();
	CComboError	ValidateContexts();
	CComboError	SetInactivityTimeout(PGPUInt32 seconds);
	void		ResetTimedOut();

	virtual PGPUInt32	ProcessExternalIo(void *ioPacket, 
		PGPBoolean& wasCompleted) = 0;

	virtual CComboError	Mount(const char *path, const char *root, 
		const char *deviceName, PGPdiskEncryptionAlgorithm algorithm, 
		const void *exportedContext, PGPUInt32 sizeContext, 
		PGPUInt64 firstDataBlock, PGPUInt64 numDataBlocks, 
		const void *ioHandlerFunc, void *refPtr, PGPUInt32 procId, 
		PGPBoolean isReadOnly = FALSE);
	virtual CComboError	Unmount(PGPBoolean isForced);

	virtual CComboError	Read(void *buf, PGPUInt64 posInBlocks, 
		PGPUInt32 nBlocks) const;
	virtual CComboError	Write(const void *buf, PGPUInt64 posInBlocks, 
		PGPUInt32 nBlocks);

protected:
	CFile	mFile;
	CThread	*mIoThread;
	CVolume	mVolume;

	PGPUInt32	mTimeoutId;
	PGPBoolean	mTimeoutActive;
	PGPBoolean	mHasTimedOut;

	CCipherContext	mCipherContext;
	mutable CMutex	mCipherContextMutex;
	CArray<PGPByte>	*mBufferObject;
	PGPByte			*mBuffer;

	PGPBoolean	mIsReadOnly;
	PGPUInt64	mFirstDataBlock;
	PGPUInt64	mNumDataBlocks;
	PGPUInt32	mHostBlockSize;

	static VOID	InactivityTimerCallback(ULONG userVal);

	virtual CComboError	CalcBlockSizeOfHost(const char *path, 
		PGPUInt32& hostBlockSize) const = 0;
	virtual CComboError	PerformPremountTasks() {return CComboError();}
};

_PGP_END

#endif	// ] Included_CPGPdiskImp_h

⌨️ 快捷键说明

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