cdcb.h

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

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

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

#ifndef Included_CDcb_h	// [
#define Included_CDcb_h

_PGP_BEGIN

// Class CDcb

class CDcb
{
	NOT_COPYABLE(CDcb)

private:
	enum {kDcbSignature = 0x4342};

public:
	CDcb(PDCB pDcb = NULL) : mWeCreated(FALSE), mDcb(pDcb) { }
	~CDcb();

	PGPBoolean	WeCreated() const {return mWeCreated;}

	operator DCB&() {return *mDcb;}
	operator const DCB&() const {return *mDcb;}

	operator DCB_COMMON&() {return (*mDcb).DCB_cmn;}
	operator const DCB_COMMON&() const {return (*mDcb).DCB_cmn;}

	operator PDCB() {return mDcb;}
	operator const PDCB() const {return mDcb;}

	operator PDCB_COMMON() {return &mDcb->DCB_cmn;}
	operator const PDCB_COMMON() const {return &mDcb->DCB_cmn;}

	DCB_COMMON&		Common() const 
	{
		return mDcb->DCB_cmn;
	}

	DCB_BLOCKDEV&	Bdd() const 
	{
		return mDcb->DCB_bdd;
	}

	PDCB&			PhysicalDcb() const 
	{
		return *reinterpret_cast<PDCB *>(&Common().DCB_physical_dcb);
	}

	unsigned long&	ExpansionLength() const 
	{
		return Common().DCB_expansion_length;
	}

	DCB_cd_entry *&	CalldownList() const 
	{
		return *reinterpret_cast<DCB_cd_entry **>(&Common().DCB_ptr_cd);
	}

	PDCB_COMMON&	NextDcb() const 
	{
		return *reinterpret_cast<PDCB_COMMON *>(&Common().DCB_next_dcb);
	}

	PDCB_COMMON&	NextLogicalDcb() const 
	{
		return *reinterpret_cast<PDCB_COMMON *>(
			&Common().DCB_next_logical_dcb);
	}

	PGPUInt8&		Drive() const 
	{
		return Common().DCB_drive_lttr_equiv;
	}

	PGPUInt8&		UnitNumber() const 
	{
		return Common().DCB_unit_number;
	}

	PGPUInt16&		TsdFlags() const 
	{
		return Common().DCB_TSD_Flags;
	}

	PVRP&			Vrp() const 
	{
		return *reinterpret_cast<PVRP *>(&Common().DCB_vrp_ptr);
	}

	unsigned long&	DemandFlags() const 
	{
		return Common().DCB_dmd_flags;
	}

	unsigned long&	DeviceFlags() const 
	{
		return Common().DCB_device_flags;
	}

	unsigned long&	DeviceFlags2() const 
	{
		return Common().DCB_device_flags2;
	}

	unsigned long&	PartitionStart() const 
	{
		return Common().DCB_Partition_Start;
	}

	PGPUInt8&		BlockShift() const 
	{
		return Common().DCB_apparent_blk_shift;
	}

	PGPUInt8&		PartitionType() const 
	{
		return Common().DCB_partition_type;
	}

	PGPUInt16&		Sig() const 
	{
		return Common().DCB_sig;
	}

	PGPUInt8&		DeviceType() const 
	{
		return Common().DCB_device_type;
	}

	PGPUInt8&		BpbFlags() const 
	{
		return Common().DCB_disk_bpb_flags;
	}

	PGPUInt16&		UserDrive() const 
	{
		return Common().DCB_user_drvlet;
	}

	unsigned long&	MaxTransferLength() const 
	{
		return mDcb->DCB_max_xfer_len;
	}

	PGPUInt64&		SectorCount() const 
	{
		return *reinterpret_cast<PGPUInt64 *>(&mDcb->DCB_actual_sector_cnt);
	}

	unsigned long&	BlockSize() const 
	{
		return mDcb->DCB_actual_blk_size;
	}

	unsigned long&	Heads() const 
	{
		return mDcb->DCB_actual_head_cnt;
	}

	unsigned long&	Cylinders() const 
	{
		return mDcb->DCB_actual_cyl_cnt;
	}

	unsigned long&	Spt() const 
	{
		return mDcb->DCB_actual_spt;
	}

	PGPUInt8&		BusType() const 
	{
		return mDcb->DCB_bus_type;
	}

	PGPUInt8&		BusNumber() const 
	{
		return mDcb->DCB_bus_number;
	}

	char *			VendorId() const 
	{
		return reinterpret_cast<char *>(mDcb->DCB_vendor_id);
	}

	char *			ProductId() const 
	{
		return reinterpret_cast<char *>(mDcb->DCB_product_id);
	}

	char *			RevLevel() const 
	{
		return reinterpret_cast<char *>(mDcb->DCB_rev_level);
	}

	char *			PortName() const 
	{
		return reinterpret_cast<char *>(mDcb->DCB_port_name);
	}

	PGPUInt8&		CurrentUnit() const 
	{
		return mDcb->DCB_current_unit;
	}

	unsigned long&	PortSpecific() const 
	{
		return mDcb->DCB_Port_Specific;
	}

	PGPUInt8&		BddMajorVersion() const 
	{
		return Bdd().DCB_BDD_BD_Major_Version;
	}

	PGPUInt8&		BddMinorVersion() const 
	{
		return Bdd().DCB_BDD_BD_Minor_Version;
	}

	PGPUInt8&		BddDeviceSubtype() const 
	{
		return Bdd().DCB_BDD_Device_SubType;
	}

	PGPUInt8&		BddInt13Number() const 
	{
		return Bdd().DCB_BDD_Int_13h_Number;
	}

	unsigned long&	BddFlags() const 
	{
		return Bdd().DCB_BDD_flags;
	}

	PGPUInt64&		BddSectorCount() const 
	{
		return *reinterpret_cast<PGPUInt64 *>(&Bdd().DCB_apparent_sector_cnt);
	}

	unsigned long&	BddBlockSize() const 
	{
		return Bdd().DCB_apparent_blk_size;
	}

	unsigned long&	BddHeads() const 
	{
		return Bdd().DCB_apparent_head_cnt;
	}

	unsigned long&	BddCylinders() const 
	{
		return Bdd().DCB_apparent_cyl_cnt;
	}

	unsigned long&	BddSpt() const 
	{
		return Bdd().DCB_apparent_spt;
	}

	PGPUInt32		CalcBlockSizeFromShift() const 
	{
		return (1 << BlockShift());
	}

	CComboError	GetDcbOfDrive(PGPUInt8 drive);

	CComboError	Create();
	void		Destroy();

private:
	PGPBoolean	mWeCreated;
	PDCB		mDcb;
};

_PGP_END

#endif	// ] Included_CDcb_h

⌨️ 快捷键说明

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