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

📄 cpgpdiskhandlerimp.h

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

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

#ifndef Included_CPGPdiskHandlerImp_h	// [
#define Included_CPGPdiskHandlerImp_h

#include "pgpDiskPubTypes.h"

#include "CImp.h"
#include "CList.h"
#include "CLookasideList.h"
#include "CRMWOLock.h"
#include "CThread.h"
#include "CTimer.h"

#include "CPGPdisk.h"
#include "CPGPdiskHandlerImp.h"

_PGP_BEGIN

// Types

class CString;

// Class CPGPdiskHandlerImp

class CPGPdiskHandlerImp : public CImp
{
	friend class CPGPdiskHandler;

protected:
	enum
	{
		ContextToggleSeconds	= 5, 
		ContextVerifySeconds	= 5, 
		MaxQueuedTasks			= 32
	};

	enum HandlerTask;
	struct TaskInfoHeader;
	struct MountTaskInfo;
	struct UnmountTaskInfo;
	struct UnmountAllTaskInfo;
	struct EverySecondTaskInfo;

protected:
	CPGPdiskHandlerImp();

	PGPBoolean	IsFileAMountedPGPdisk(const char *path) const
	{
		return IsntNull(GetPGPdiskByPath(path));
	}

	PGPBoolean	IsRootAMountedPGPdisk(const char *root) const
	{
		return IsntNull(GetPGPdiskByRoot(root));
	}

	const char *	GetDiskDevNameByPath(const char *path) const;
	const char *	GetDiskDevNameByRoot(const char *root) const;

	PGPUInt32	NumPGPdisks() const
	{
		return mPGPdiskList.Count();
	}

	CComboError	ExportPGPdiskInfo(PGPdiskInfo *pInfoArray, 
		PGPUInt32 numElems, PGPUInt32 &elemsFilled) const;

	void		TurnOnUnmountAllMode()
	{
		mInUnmountAllMode = TRUE;
	}

	CComboError	SetInactivityTimeout(const char *root, PGPUInt32 seconds);
	PGPBoolean	AreDisksTimedOut();
	void		ResetTimedOutDisk(const char *root);

	CComboError	MountPGPdisk(const char *path, const char *root, 
		PGPdiskEncryptionAlgorithm algorithm, const void *exportedContext, 
		PGPUInt32 sizeContext, PGPUInt64 firstDataBlock, 
		PGPUInt64 numDataBlocks, char *deviceName, PGPBoolean readOnly);

	CComboError	UnmountPGPdisk(const char *root, PGPBoolean isForced);
	CComboError	UnmountAllPGPdisks(PGPBoolean isForced);

protected:
	CLookasideList<CPGPdisk>	mPGPdiskAllocator;

	CList<CPGPdisk>		mPGPdiskList;
	mutable CRMWOLock	mPGPdiskListLock;

	PGPBoolean	mInUnmountAllMode;
	PGPBoolean	mWorkerThreadCreated;
	CThread		mTaskThread;
	CTimer		mEverySecondTimer;

	virtual void		Shutdown();
	virtual CComboError	Startup();

	CComboError	CreateWorkerThread();
	void		DestroyWorkerThread();

	CComboError	ConstructDeviceName(CString& deviceName) const;

	virtual const void *	GetPlatformIoHandlerFunc() const = 0;
	virtual PGPUInt32		GetPlatformProcessId() const = 0;

	CPGPdisk *	GetPGPdiskByPath(const char *path) const;
	CPGPdisk *	GetPGPdiskByRoot(const char *root) const;
	CPGPdisk *	GetPGPdiskByDeviceName(const char *deviceName) const;

	virtual CComboError	UnmountPGPdiskAux(CPGPdisk *pPGD, 
		PGPBoolean isForced = FALSE);

	virtual CComboError	MountPGPdiskCallback(MountTaskInfo *pMTI);
	virtual CComboError	UnmountPGPdiskCallback(UnmountTaskInfo *pUTI);
	virtual CComboError	UnmountAllPGPdisksCallback(
		UnmountAllTaskInfo *pUATI);
	virtual void		EverySecondThreadCallback(EverySecondTaskInfo *pESTI);

	void				PGPdiskTaskCallbackAux(TaskInfoHeader *pTIH);
	static void _cdecl	PGPdiskTaskCallback(void *refPtr);

	CComboError	PerformPGPdiskTask(TaskInfoHeader *pTIH, 
		HandlerTask task);
	CComboError	SchedulePGPdiskTask(TaskInfoHeader *pTIH, 
		HandlerTask task);

	virtual void		EverySecondTimerCallbackAux();
	static void _cdecl	EverySecondTimerCallback(void *refPtr);
};

_PGP_END

#endif	// Included_CPGPdiskHandlerImp_h

⌨️ 快捷键说明

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