如何实现对u盘物理扇区的写操作?
我有一个u盘。有一次我从计算机拔下u盘时没有采用安全方式,结果第二天就出问题了,插上u盘后报
告“驱动器H中的磁盘未被格式化。”。我判断是u盘上的格式化信息被损坏了。于是我找来winhex对u
盘进行查看。发现我原来存储的文件都还在,而且0磁道、0柱面、1扇区的MBR数据有问题。我首先查看
了一个正常的优盘的MBR,再比较有问题的优盘,发现:正常的MBR应该是一堆00 00 00 00 00 00 00
00 00 之后跟着一些不知意的十六进制数据,最后是MBR结束符号“55 aa”;而坏优盘是一堆FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF(整个512个字节都是FF),只有最后两个字节是
“55 aa”。
于是我就想把这个优盘的MBR试着恢复一下。利用winhex的磁盘编辑功能,把好优盘的MBR复制,然后粘
贴给坏优盘的同样位置。没想到winhex报告:只有Full版本(完整版本)才能使用物理扇区的写功能。
郁闷,还得花钱买winhex的全版本。
于是我又下载了另一个工具“DiskExplorer.exe”。用它可以修改坏优盘上的数据,提示改写成该。很
高兴的再次查看坏优盘,发现根本错误的mbr根本就没有改变过来。
于是,我又翻箱倒柜地找出以前曾经写过的一段改写物理扇区的代码,先读取512字节的好优盘mbr,再
将其写回到坏优盘上。退出我的程序再次查看,还是不正确。后来我又想会不会是优盘的写入需要“安
全删除硬件”才行,我就又试验了一次,可还是不行。
我的代码是通过CreateFile("\\\\.\\H:", ... );的方式打开优盘,用ReadFile (hDevice, buffer,
512*numberofsectors, &bytesread, NULL)读取好优盘数据,读取后数据也很正确,然后用WriteFile(
hDevice, buffer, 512, &bytesread, NULL );返回值也是true。一切好像都没问题,可就是不能让坏
优盘上的坏mbr改写成正确的。
真是奇怪,我是在VC 6.0 WINDOWS XP环境下测试的,我怀疑是不是windows不允许直接写物理扇区啊?
看其他文章说Windows禁止了int 13中断,不知道跟我的操作有没有影响。各位,哪个知道啊?我希望
找回我优盘的数据,谁能帮助我呀?最好能给个能实现的代码,或者有哪个工具软件可以实现也行啊,
最好发邮件给我。谢谢了。