硬盘结构-Partition

        不论是MBR还是GPT,都可以通过startingLBA找到partition逻辑位置,每个partition会格式化为当前OS可识别的文件系统,如FAT32,NTFS;分区第一个扇区结构为BPB BIOS Parameter Block,其数据结构大概如下,都以0xaa55为结尾符;一般找到分区就能BPB判断分区文件格式。

typedef struct

{

    UINT8  jmp[3];               // 0

    CHAR8  OEMName[8];           // 3

    UINT16 BytsPerSec;           // 11

    UINT8  SecPerClus;           // 13

    UINT16 RsvdSecCnt;           // 14

    UINT8  NumFATs;              // 16

    UINT16 RootEntCnt;           // 17

    UINT16 TotSec16;             // 19

    UINT8  Media;                // 21

    UINT16 FATSz16;              // 22

    UINT16 SecPerTrk;            // 24

    UINT16 NumHeads;             // 26

    UINT32 HiddSec;              // 28

    UINT32 TotSec32;             // 32

    union

    {

        struct

        {

            UINT8 Padding[510 - 36];

        } Fat16;

        struct

        {

            UINT32 FATSz32;      // 36

            UINT8  Padding1[4];  // 40

            UINT32 RootClus;     // 44

            UINT8  Padding2[510 - 48];

        } Fat32;

        struct

        {

            UINT32 FATSz32u;    // 36

            UINT64 TotSec64;    // 40

            UINT64 MFTClus;     // 48

            UINT8  Padding3[510 - 56];

        } Ntfs;

    } Fat;

    UINT16 Signature;

} BOOT_SECTOR;

        UEFI为上面每一个partition生成一个controller,如果这个分区属性bit1 为0,则为这个分区控制器安装BlockIO;ReadBlocks函数就可以用来读取块设备,只能按块(扇区)读取设备

MediaId

设备中的介质号,BlockIo->Media->MediaId

LBA

读取设备或者分区起始块的LBA地址

BufferSize

读取的字节数,必须是块大小的整数倍

*Buffer

读取的数据存到此缓冲区,调用者需要对此区管理

        例如读取硬盘MBR区域或者GPT硬盘的保护性MBR区域,可以用ReadBlocks函数,LBA=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值