📄 disktool.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 + -