|
#以下代码用于判断1-62扇区是否有数据
#可能代码段比较长,但是增加了安全性
set fqbkx=
cat --length=0 --hex %disk%+1 || goto :cpdqcw
dd if=%disk%+1 of=(md)0x200+1 || goto :cpdqcw
#以下用于检查分区表55AA标志
checkrange 0x55 calc *0x401fe&0xff || goto :wxfqb
checkrange 0xAA calc *0x401ff&0xff || goto :wxfqb
#0,80检查用于检查分区表是否有效
checkrange 0,0x80 calc *0x401be&0xff || goto :wxfqb
#分区起始LBA检查用于确定分区表项是否为空
checkrange 0 read 0x401c6 || set fqbkx=ok
checkrange 1:62 read 0x401c6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ce&0xff || goto :wxfqb
checkrange 0 read 0x401d6 || set fqbkx=ok
checkrange 1:62 read 0x401d6 && goto :myzgkj
checkrange 0,0x80 calc *0x401de&0xff || goto :wxfqb
checkrange 0 read 0x401e6 || set fqbkx=ok
checkrange 1:62 read 0x401e6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ee&0xff || goto :wxfqb
checkrange 0 read 0x401f6 || set fqbkx=ok
checkrange 1:62 read 0x401f6 && goto :myzgkj
if not exist fqbkx && goto :wxfqb
以上是修改的 清除1-62 扇区的判断代码.虽然比原来复杂很多,但是增强了安全性. 如果找不到分区,就是空分区表的情况下会拒绝刷新,起始扇区小于63扇区也拒绝刷新. 判断不是分区表,通过检查四个表项开始字节是不是80或者是00 来决定,如果出现了无效的取值,会拒绝刷新.
在CHENALL最后一次修改后,一直没有上传最新版,今天上传最后一个命令行版.如果没有BUG,不再修改,也不再优化或者是更新代码.算是命令行版的终结版吧.
我已在虚拟机测试过,更新主引导,分区引导,NT52 NT60 DOS 清除扇区. 有时间,会继续编写菜单版的批处理.感谢ZHAOHJ大侠的帮忙. 可能要过一段时间才能写出来,大家要等等了. |
|