如何实现对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中断,不知道跟我的操作有没有影响。各位,哪个知道啊?我希望

找回我优盘的数据,谁能帮助我呀?最好能给个能实现的代码,或者有哪个工具软件可以实现也行啊,

最好发邮件给我。谢谢了。
...全文
2118 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqxhhe 2008-08-25
  • 打赏
  • 举报
回复
弄个linux liveCD
用dd命令操作你的U盘,随便你怎末修改扇区

可以先dd出来,修改好了再dd回去。

或者直接dd一份好的进去。
不用像在windows下操作底层这么费劲,不过小心弄错了后或很严重哦。
cqxhhe 2008-08-25
  • 打赏
  • 举报
回复
弄个linux liveCD
用dd命令操作你的U盘,随便你怎末修改扇区

可以先dd出来,修改好了再dd回去。

或者直接dd一份好的进去。
不用像在windows下操作底层这么费劲,不过小心弄错了后或很严重哦。
哎呀,对不起,搞错了,我加错分了,本来希望给AliasKavin加40分的,结果加在vcPlayer身上了,vcPlayer,你可合适了。

我也没办法修改已经结贴的分数了。真抱歉。AliasKavin
最近太忙,没有时间试验AliasKavin朋友给的方法,别耽误大家,先结贴吧。
再次感谢这么多热心的朋友。

说明:给分的标准是看哪个朋友的贡献大,哪个朋友更热心。不可能绝对的公平吧。呵呵。差不多的。
to AliasKavin:太感谢了,你给的方法很全面。我试验一下。
AliasKavin 2008-06-16
  • 打赏
  • 举报
回复
另外可以参考以下方法未测试小心操作~~~
http://zhidao.baidu.com/question/27963041.html

还有一方法理论可以没有测试~~`
先参考下面可在以DOS下装载U盘~` 再用DM重建分区表~~或是修改分区表`~~ 未测试可能有危险~~
http://zhidao.baidu.com/question/9464075.html
AliasKavin 2008-06-16
  • 打赏
  • 举报
回复
是使用原始恢复吗~~~不含任何文件系统的结构信息恢复`~~
to AliasKavin:谢谢,EasyRecovery Professional 我用过了,只是对文件进行恢复,不能恢复我的优盘分区。而且恢复出来的文件莫明其妙,文件名也没有,没有什么意义。
AliasKavin 2008-06-16
  • 打赏
  • 举报
回复
EasyRecovery Professional 可以试下`~~
petsatan:finaldata没用,那是根据文件来恢复的,我是要恢复分区的。不过也谢谢你了。
petsatan 2008-06-07
  • 打赏
  • 举报
回复
建议用工具,finaldata试试
没有熟悉硬盘读写的大侠啦?
codewarrior:谢谢,我试验一下。
会思考的草 2008-06-06
  • 打赏
  • 举报
回复
我建议你把盘放到一个干净的系统上去修改分区,修改之前先备份。不要装杀毒软件和硬盘保护软件。
jslisong:DDK开发没有任何经验。不过相信可以解决这个问题。多谢。
碧螺春的马甲 2008-06-05
  • 打赏
  • 举报
回复
DDK SPTI Sample Code
使用 WRITE10 写 0~63 sector

纯技术提示,还是建议使用现成工具。
再没有高手了吗?
cnzdgs 2008-06-03
  • 打赏
  • 举报
回复
已经发了
cnzdgs:谢谢你的善意提醒。长知识了。我的email:wzfree@tom.com
谢谢,我会注意的。
cnzdgs 2008-06-03
  • 打赏
  • 举报
回复
我手里就有能写扇区的WinHex,留个E-mail发给你。
还是要提醒你一下:只改第0扇区是不会破坏文件中的数据,但如果改的不对,就有可能导致Windows在装载U盘的时候把后面的数据给破坏了。建议你找一个规格完全相同的U盘来复制。
加载更多回复(23)

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧