ImgDrive的一个重大隐患

Author: 山东 王胜辉 Date: 1996-10-25

        DiskDupe建立的*.DDI文件,在偏移量为0x64字节处记录着磁盘的有关信息,如哪个磁道有数据,哪个磁道是空闲的。一般来说,每个磁道在.DDI文件中对应6个标志字节。如果磁道内容全空(全为0xf6),则这6个字节就全是00,且在.DDI文件中不记录磁道内容。若该磁道中有一个扇区包含非0xf6的字节,则整个磁道的内容均将被记录到.DDI文件中,且对应的6个字节记成:01 xx 00 00 00 01形式,其中xx为所记录的磁道在.DDI文件中的顺序编号(从0x01开始)。每个磁道包含的扇区数由.DDI文件0x0a偏移字节决定。事实上,0x0a偏移字节记录着对应的软盘容量,如1.2M软盘为0x02,720K软盘为0x03,1.44M软盘为0x04等等。根据软盘容量,就可得知相应的每磁道扇区数。
        ImgDrive在读取.DDI文件内容时,如果读到一组标志字节全为00,则此后的标志字节均不予理睬。亦即一张磁盘中,如果有一个磁道内容全为0xf6,则其后的所有磁道所记录的内容均将被ImgDrive忽略,虽然它们仍完好无损地保存在.DDI文件中。
        大家可以来做个试验。用DOS的Format/u/f:1440格式化一张1.44M小盘,格式化完毕后,应该是每磁道18个扇区,每簇1个扇区,每个FAT表占9个扇区,根目录Root区占14个扇区,数据区从0道1面16扇区开始。用DiskEdit查看该盘,按Alt+P选择从0道1面16扇区开始的21个物理扇区,再按Alt+W写到一个文件中,比如C:21S。退出DiskEdit。将刚才的文件拷入小盘,再在小盘上随便建立一个文件,或是再拷上一个文件,如PC.EXE。删除第一个文件。这样,1道0面就成了只包含0xf6的空磁道,而从1道1面开始的簇存放着PC.EXE的内容。用DiskDupe将该盘映象成.DDI文件,文件头部从0x64偏移处的标志字节应为:
        01 01 00 00 00 01
        01 02 00 00 00 01
        00 00 00 00 00 00
        01 03 00 00 00 01
        ……
        再用ImgDrive读取.DDI文件,你就会发现,文件PC.EXE的内容竟然是空的!(全为0x00)
        有鉴于此,建议大家在使用ImgDrive读取*.DDI文件之前,先用工具软件查看一下.DDI文件的磁道标志字节,若有此类情况发生,最好用DiskDupe复制到软盘上,用Defrag或是Compress整理一下软盘,再制成.DDI文件以备使用。