正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与派遣函数”中,我们知道了驱动程序需要处理I/O请求,我们先来看看怎么发出一个I/O请求。
一般的程序不会直接去访问磁盘,毕竟有文件系统(FileSystem)帮助我们轻松地组织文件,但是有时候必须访问磁盘,因为文件系统隐藏了低层次的实现,linux人喜欢把文件系统叫做“虚拟文件系统(VFS)”,其实原因就在这里,比如我们把一个文件从一个分区复制到另一个分区(其实就是从一个分区中读取文件再向另一个分区写入文件,当然一般是分段读取写入的,或者是用虚拟内存(线性地址空间)映射文件),我们不需要关心磁盘上分区的组织方法,比如MBR格式或GPT格式,也不需要关心分区对数据的组织方式,不管是FAT32,NTFS,exFAT,ext2/3/4格式等等,这就是文件系统的魅力所在。咳咳,扯的有点远哈,回归正题,我们的目的是绕过文件系统,直接访问磁盘上的扇区,就像市面上的PE盘制作器一样,可以把引导程序写人U盘的主引导扇区(第一个扇区,一般是512字节)。
演示一下将第一块磁盘的主引导扇区读出来,写的话把ReadFile换成WriteFile,再稍微改下代码就可以了,这些API函数在我之前的一篇博客中有详细解释(参见:http://blog.csdn.net/zuishiko