访问硬盘(四)

下面我们来实现IDEHardDrive这个类。IDEHardDrive将真正和硬盘硬件打上交道,假如你已经忘了该如何操作硬盘,请参考前面的介绍

 

废话少说,我们先来看构造函数

 

 

大家看到这里我们include了一个叫intrin.h的头文件。这个头文件是一个VC标准头文件。里面声明了一些编译器内置函数,比如端口读写等等。我们使用了这些函数就可以不用内嵌汇编来读写端口了。

 

构造函数非常简单,仅仅初始化了IDE的端口基地址,对于第一个IDE控制器来说,这个基地址是1F0。对于第二个IDE控制器来说,这个基地址是170。用这种方式,我们就避免了硬编码端口地址,从而可以支持多个IDE控制器。当然,这里我还没有加上主从盘的区别,这里我们只支持硬盘挂在主盘的位置上,读者有兴趣可以将其改为支持从盘。

 

接下来我们来看看我们要如何打开一个硬盘。打开硬盘时我们需要做什么初始化工作呢?

 

 

这里我们看到,当打开一个硬盘的时候,我们读出了硬盘分区表。ReadBlock函数我们后面会介绍到,它将把制定的一个扇区读到buffer处,然后从里边得到硬盘分区表数据并存入m_PartitionTables数组。

 

有了分区表数据后,我们就可以枚举分区了。

 

 

枚举分区时,我们将依次检查4个分区表项。假如分区存在,我们就为其创建一个主分区对象,并把这个主分区对象加入返回的分区集合。另外,删除分区和修改分区暂时没有用,我们就不实现了,大不了抛出一个异常了事。读者可以自己来写代码,这里我就不多写了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值