ciop.h

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C头文件 代码 · 共 229 行

H
229
字号
/*____________________________________________________________________________
		Copyright (C) 2002 PGP Corporation
        All rights reserved.

        $Id: CIop.h,v 1.2 2002/08/06 20:09:30 dallen Exp $
____________________________________________________________________________*/

#ifndef Included_CIop_h	// [
#define Included_CIop_h

_PGP_BEGIN

// Class CIop

class CIop
{
	NOT_COPYABLE(CIop)

public:
	enum {kDefaultIopTimeout = 15, kPGPdiskIopMagic = 0xAB42F61D};

public:
	CIop();
	CIop(PIOP pIop);
	~CIop();

	PGPBoolean	WeCreated() const {return mWeCreated;}

	operator IOP&() {return *mIop;}
	operator const IOP&() const {return *mIop;}

	operator IOR&() {return mIop->IOP_ior;}
	operator const IOR&() const {return mIop->IOP_ior;}

	operator PIOP() {return mIop;}
	operator const PIOP() const {return mIop;}

	operator PIOR() {return &mIop->IOP_ior;}
	operator const PIOR() const {return &mIop->IOP_ior;}

	PIOP	Get() const {return mIop;}

	PGPBoolean	IsAPGPdiskIop() const 
	{
		return (PrivatePort() == kPGPdiskIopMagic);
	}

	PGPBoolean	IsInBytes() const 
	{
		return 	(Flags() & IORF_CHAR_COMMAND ? TRUE : FALSE);
	}

	PGPBoolean	IsScatterGather() const 
	{
		return 	(Flags() & IORF_SCATTER_GATHER ? TRUE : FALSE);
	}

	IOR&			Ior() const 
	{
		return mIop->IOP_ior;
	}

	PIOR&			Next() const 
	{
		return *reinterpret_cast<PIOR *>(&Ior().IOR_next);
	}

	PDCB&			PhysicalDcb() const 
	{
		return *reinterpret_cast<PDCB *>(&mIop->IOP_physical_dcb);
	}

	PDCB_COMMON&	OriginalDcb() const 
	{
		return *reinterpret_cast<PDCB_COMMON *>(&mIop->IOP_original_dcb);
	}

	PGPUInt16&		Timer() const 
	{
		return mIop->IOP_timer;
	}

	PGPUInt16&		TimerOrig() const 
	{
		return mIop->IOP_timer_orig;
	}

	DCB_cd_entry *&	CalldownPtr() const 
	{
		return *reinterpret_cast<DCB_cd_entry **>(&mIop->IOP_calldown_ptr);
	}

	IOP_callback_entry *&	CallbackPtr() const 
	{
		return *reinterpret_cast<IOP_callback_entry **>(
			&mIop->IOP_callback_ptr);
	}

	PGPUInt16&		Func() const 
	{
		return Ior().IOR_func;
	}

	PGPUInt16&		Status() const 
	{
		return Ior().IOR_status;
	}

	unsigned long&	Flags() const 
	{
		return Ior().IOR_flags;
	}

	CMDCPLT&		Callback() const 
	{
		return Ior().IOR_callback;
	}

	PGPUInt64&		StartAddress() const 
	{
		return *reinterpret_cast<PGPUInt64 *>(&Ior().IOR_start_addr);
	}

	unsigned long&	TransferCount() const 
	{
		return Ior().IOR_xfer_count;
	}

	void *&			Buffer() const 
	{
		return *reinterpret_cast<void **>(&Ior().IOR_buffer_ptr);
	}

	unsigned long&	PrivatePort() const 
	{
		return Ior().IOR_private_port;
	}

	PGPUInt16&		IoctlDrive() const 
	{
		return Ior().IOR_ioctl_drive;
	}

	PGPUInt16&		IoctlFunction() const 
	{
		return Ior().IOR_ioctl_function;
	}

	unsigned long&	IoctlControlParam() const 
	{
		return Ior().IOR_ioctl_control_param;
	}

	void *&			IoctlBuffer() const 
	{
		return *reinterpret_cast<void **>(&Ior().IOR_ioctl_buffer_ptr);
	}

	unsigned long&	IoctlClientParams() const 
	{
		return Ior().IOR_ioctl_client_params;
	}

	unsigned long&	IoctlReturn() const 
	{
		return Ior().IOR_ioctl_return;
	}

	unsigned long&	IoctlBufferLength() const 
	{
		return Ior().IOR_private_client;
	}

	unsigned long&	ReqReqHandle() const 
	{
		return Ior().IOR_req_req_handle;
	}

	PVRP&			ReqVolHandle() const 
	{
		return *reinterpret_cast<PVRP *>(&Ior().IOR_req_vol_handle);
	}

	PSGD&			SgdLinPhys() const 
	{
		return *reinterpret_cast<PSGD *>(&Ior().IOR_sgd_lin_phys);
	}

	PGPUInt8&		NumSgds() const 
	{
		return Ior().IOR_num_sgds;
	}

	PGPUInt8&		Drive() const 
	{
		return Ior().IOR_vol_designtr;
	}

	PGPBoolean		IsStatusError() const 
	{
		return (Status() >= IORS_ERROR_DESIGNTR);
	}

	PGPUInt32		GetErrorAsWin32() const 
	{
		return IOSMapIORSToI21(Status());
	}

	PGPBoolean		DoIlbCriteria() const;
	PGPBoolean		DoInternalIlbCriteria() const;

	CComboError	Create(PVRP pVrp, PGPUInt8 flags);
	void		Destroy();

	void	SendCommand(const PDCB pDcb) const;
	void	Callback(PGPUInt16 status) const;

private:
	PGPBoolean	mWeCreated;
	PIOP		mIop;

	PGPUInt16	mOffset;
	PGPUInt16	mSize;
};

_PGP_END

#endif	// ] Included_CIop_h

⌨️ 快捷键说明

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