访问硬盘(四)

来源:互联网 发布:c语言中!a是什么意思 编辑:程序博客网 时间:2024/05/16 19:27

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

 

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

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 话费充错了号码怎么办? 微信被骗充话费怎么办 微信话费充多了怎么办 睫毛烫的太卷了怎么办 烫完睫毛太卷了怎么办 烫睫毛太卷了怎么办 用微信充话费充错了怎么办 微信给空号充话费了怎么办 微信充话费充错号码是空号怎么办 淘宝充流量不到账怎么办 微信退货不退款怎么办 京东话费交错号怎么办? 微信缴费错了怎么办 给手机充话费被退款怎么办 买到假货淘宝商家已关店怎么办 手机刷错系统了怎么办 苹果手机成砖了怎么办 苹果6p变砖头怎么办 苹果刷成石头了怎么办 苹果手机更新成了砖头怎么办 京东售后好慢怎么办 京东商品超过售后期怎么办 京东过了售后期怎么办 京东售后不处理怎么办 京东售后不让退货怎么办 天猫盒子遥控器丢了怎么办 淘宝店铺的客服不理人怎么办 淘宝假货下架了怎么办 淘宝不让发布本地生活服务了怎么办 淘宝删除差评后店家不返现怎么办 天猫店家迟迟不发货怎么办 淘宝下单后店家说缺货怎么办 用淘宝把话费冲到空号上怎么办 d速快递没有网点怎么办 京东买的货没收到怎么办 淘宝物流显示已揽件就是不动怎么办 淘宝查不到物流信息怎么办 快递物流信息更新错怎么办 淘宝上查不到物流怎么办 微信买的东西不给退怎么办 微信购物已收货怎么办