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

📄 disktool.h

📁 EFI(Extensible Firmware Interface)是下一代BIOS
💻 H
字号:
/*****************************************************************
Copyright (c) 2005.11 Lenovo Corporation
Module Name:    DiskTool.h
Abstract:     	provide a series of functions to control DiskIO
Author:			Wang Zhe
*******************************************************************/

#ifndef _DISKTOOL_H
#define _DISKTOOL_H   
#include "efi.h"
#include "efilib.h"

//定义一个ATA的设备结构,用来记录现在机子上的各个IDE接口上连接的设备
//规定其值[0]:
//	0 没有设备
//	1 硬盘
//	2 光驱
//[1]代表所处的blk块号
#define ATAIDE_NULL			0
#define ATAIDE_HARDDISK		1
#define ATAIDE_CDROM		2
typedef struct
{
	INT32 PrimaryMaster[2];
	INT32 PrimarySlave[2];
	INT32 SecondaryMaster[2];
	INT32 SecondarySlave[2];
}ATAIDE_Device;

///////////////////////////////////////////////////////////
//16进制转化为10进制
///////////////////////////////////////////////////////////
UINT32	HextoDec(
    UINT8         HighHigh,
    UINT8         High,
    UINT8         Mid,
    UINT8         Low
);

///////////////////////////////////////////////////////////
//10进制转化为16进制
///////////////////////////////////////////////////////////
void	DectoHex(
	UINT32		DecNum,
    UINT8       *HighHigh,
    UINT8       *High,
    UINT8       *Mid,
    UINT8       *Low
);

///////////////////////////////////////////////////////////
//磁盘块读取函数,单位是扇区,
//输入:		存放读出内容的buf
//			从哪个扇区开始读出
//			需要读出的长度
//			*默认操纵第一个磁盘的东西
///////////////////////////////////////////////////////////
EFI_STATUS	DiskBlockIO_ReadBlock(UINT8 *BlockBuffer, //存放读出内容的buf
									INT32 StartSector, //从哪个扇区开始读出
									INT32 SectorNum);//需要读出的长度

///////////////////////////////////////////////////////////
//磁盘块写入函数,单位是扇区
//输入:		含有写入内容的buf
//			从哪个扇区开始写入
//			需要写入的长度
//			*默认操纵第一个磁盘的东西
///////////////////////////////////////////////////////////
EFI_STATUS	DiskBlockIO_WriteBlock(UINT8 *BlockBuffer, //含有写入内容的buf
									INT32 StartSector, //从哪个扇区开始写入
									INT32 SectorNum);//需要写入的长度


//////////////////////////////////////////////////////////
//获得第一个IDE硬盘的BLk块号没有返回-1
//优先级如下:
//		Primary,Master
//		Primary,Slave
//		Secondary,Master
//		Secondary,Slave
//参数IsPartID=FALSE 说明是寻找硬盘的主blk,否则是第一个分区的blk
///////////////////////////////////////////////////////////
INT32	GetFirstIDEHardDiskBlkID(BOOLEAN IsPartID);//

//////////////////////////////////////////////////////////
//获得第一个IDE硬盘的文件系统号没有返回-1
//优先级如下:
//		Primary,Master
//		Primary,Slave
//		Secondary,Master
//		Secondary,Slave
///////////////////////////////////////////////////////////
INT32	GetFirstIDEHardDiskFSID();

//////////////////////////////////////////////////////////
//获得第n (n>=1)个IDE硬盘分区的文件系统号没有返回-1
//优先级如下:
//		Primary,Master
//		Primary,Slave
//		Secondary,Master
//		Secondary,Slave
///////////////////////////////////////////////////////////
INT32	GetIDEHardDiskFSID(INT32 DiskPartitionIndex);

//block字符串变成ID号,如果BlkStr不是合法的blk字符串返回-1
//合法的blk字符串:blk0 blk1 blk2......
INT32	BlkStrToBlkID(CHAR16* BlkStr);

//fs字符串变成ID号,如果fsStr不是合法的fs字符串返回-1
//合法的fs字符串:fs0 fs1 fs2......
INT32	FSStrToFSID(CHAR16* FSStr);



//分区列表结构,暂定不会超过26个分区
#define MAX_DISKPARTITION_NUM 26
#define PARTITION_PRIMARY		0	//主分区
#define PARTITION_EXTEND		1	//扩展分区
typedef struct {
	UINT32	Offset;//起始扇区号
	UINT32	Size;//分区大小(单位扇区)
	UINT32	PartitionLevel;//分区类型,主分区还是扩展分区
}DiskPartition;

typedef struct {
	UINT32	DiskPartitionNum;//记录分区的个数
	UINT32	ExtendPartitionNum;//记录扩展分区的个数
	DiskPartition m_DiskPartition[MAX_DISKPARTITION_NUM];
}DiskPartitionTable;

//获取分区列表,存放每个分区的偏移量(扇区)
void	GetDiskPartitionTable(DiskPartitionTable *DPT);

//打印分区列表
void	PrintDiskPartitionTable(DiskPartitionTable *DPT);
#endif

⌨️ 快捷键说明

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