关于WINDOWS XP下直接IO(IN/OUT)硬盘MBR是否可行

yishengbubian   2009-12-5 11:41 楼主
我在WIN XP下写了简单的驱动进入ring0层后,试图直接IO硬盘的MBR,我通过IN指令可以正常读取到硬盘的MBR,但是当我用OUT指令写入的事后发现没有任何效果,WIN XP也并没有crash,但是就是在检查MBR的时候发现MBR内容一点没有变化根本没有我写入的内容,我想是不是“保护模式”下不允许通过OUT指令写MBR呢???
且我最近查了“保护模式”的一些资料并没有发现说不可以通过OUT写MBR的,所以我这里有点茫然了
请高手不吝赐教!!!!!

(还有我认为即使是保护模式通过地址GDT进行了保护那样也是无法避免ring0下的程序修改GDT项然后再OUT到MBR的)


请高手指点一二!!!!!!!

多谢

回复评论 (11)

移至驱动开发版块。
点赞  2009-12-5 13:25
驱动程序可以进行I/O,不过你这样直接执行I/O操作会与系统的驱动程序冲突,非磁盘驱动程序读写MBR可以打开硬盘设备用ZwReadFile/ZwWriteFile进行读写。
点赞  2009-12-5 16:41
恩顶一下楼上的噢,说得少但是清楚!
点赞  2009-12-5 18:39
TO: cnzdgs

我不知道是我不明白还是你不明白,直接IN/OUT跟win或LINUX等的驱动是没有任何关系的,这里写成驱动来完成是为了获得ring0的权限而已,请认真看待问题!!
还有通过WIN api是不可能绕过win的驱动框架的,也就是最终还是会调用WIN Driver!!这是最大的问题!

请非回复此问题的网友不要乱发贴,本人不是来散分的!
点赞  2009-12-6 13:07
TO: cnzdgs

对于你的判断我认为OS不会一直占用硬盘的端口,而避免其他的指令写入,并且我在检测时没有发现端口被占用的情况,而且我在检测错误码的时候,错误码为第3位08H,所以意味着没有什么错误的操作。
点赞  2009-12-8 09:02
to->楼主
你的态度有问题吧,充满这火药味,你是来问问题的,又不是来讨债的,再说 cnzdgs 可是牛人
点赞  2009-12-8 09:34
“请非回复此问题的网友不要乱发贴,本人不是来散分的!”

是对任何人说的,不是针对cnzdgs,不要误解。
我只是需要合理的答案,至少是一个经过思想过的答案,而不是没有意义的帖子!
点赞  2009-12-9 09:20
我先致歉!也许是因为被困惑了1个月的缘故吧。
不过还是请各位能思考一下再发帖,谢谢!
点赞  2009-12-9 09:24
没有试过用IN/OUT指令来读写MBR, 不过在驱动层,直接用OUT指令写其他的共享设备, 应该有时序或者操作流程上的限制, 不会是直接写目标地址一条指令就可以

建议用ZwReadFile和ZwWriteFile试试

下面这个是应用层访问MBR的例子

[url=http://download.eeworld.net/source/821369][/url]
点赞  2009-12-11 09:17
我试过了网上的一部分ring3下通过CreateFile和WriteFile函数进行MBR读写的代码,但是我不知道为什么我在虚拟机上测试没有任何效果!
还有就是WINHEX似乎可以在ring3下修改MBR,我不知道是它是怎么做到的,难道也是通过上面的那两个函数么?
点赞  2009-12-11 14:08
想看看需要回复的内容!
点赞  2010-7-1 16:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复