Delphi编写的虚拟硬盘文件浏览程序,这段代码只实现了很小的功能,对分区格式有限制,只能读取不能写入,只能读取C盘根目录下的文件.等等.代码里符带一份学习笔记,是Fat分区格式的,不是太详细,到数据恢复网可以找到详细的资料.
使用Virtual PC的时候,刚开始时对于VPC和宿主之间的文件传输却一直没有整明白,所以要从宿主计算机中传输文件到VPC中只能靠WinIso制作成iso文件再用VPC的光驱来读取,这样做很麻烦,而且只是一面传输,所以就看一下VPC的虚拟硬盘,一看之下和记忆中的硬盘格式差不多,我只记得有个"55 AA",不巧的是在这里也找到了这个数据.所以就想做一个读取虚拟磁盘的软件.
于是去网上找了一些看了下:
首先是硬盘的主引导扇区,固定值:0磁面0磁道1扇区.大小512字节,记得前几天看过<>--一本不错的书,它那上面的第一个程序便是写了一个引导程序.它便是写了程序所需要的功能后将其它地方填0以达到512字节.当然最后两个字节一定是"55 AA",只有这个值才是有效的.
但是,上面所提那个引导程序显然是不合理的(书中只是一个软件盘引导可以不涉及到分区信息).因为真正的引导程序只能是占用此扇区的前446个字节,而后面直到最后"55 AA"之前的64个字节,是用来记录分区信息的DPT(Disk PartitionTable).但是作为在虚拟机上或软盘上的演示似乎也无妨(硬盘肯定不行,会破坏整个系统分区).
由于只是为了VPC与宿主计算机交换数据,所以我决定只读取第一分区就可以了.首先准备一个新VPC虚拟硬盘,用VPC建一个最小的3M硬盘(这一点是Virtual PC比VMWare强的),分区(全做为C盘),格式化,由于硬盘很小,所以只能格式化成Fat12,这里只学习了Fat12和Fat16的分区格式,然后用UltraEdit打开:
果然,510字节后便是"55 AA"即行标"0x01f0h"最后两字节,再看一下前面行标"0x1B0h"最后两字节是"80 01"80便是表示此分区为活动分区,即从此开始为第一个分区的信息.前面正好446字节.
每一个分区由十六个字节来描述.第一字节只能为"80"或"00",我们先不关心这些字节,只关心最后四个字节--分区所占扇区数.和最后第八字节开始的四个字节--相对扇区数,即此分区之前还有多少扇区.