?? 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 + -