libeili 发表于 2009-3-31 20:30:12

由EDK对物理disk的访问引起的疑问

之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是在windows下disable某个设备,然后在EDK NT32下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊

[ 本帖最后由 libeili 于 2009-3-31 20:40 编辑 ]

qdk0901 发表于 2009-3-31 21:11:59

你是在讨论仿真器吗?

libeili 发表于 2009-3-31 21:15:15

对啊,就是在EDK的NT32环境下

qdk0901 发表于 2009-4-2 11:23:29

原帖由 libeili 于 2009-3-31 20:30 发表 http://www.ufoit.com/bbs/images/common/back.gif
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...

不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,

例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。

仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。

至于内存,有专门的Section Manager来管理映射。

[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]

libeili 发表于 2009-4-3 10:49:34

原帖由 qdk0901 于 2009-4-2 11:23 发表 http://www.ufoit.com/bbs/images/common/back.gif


不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
你把设备都禁用了,所有的IRP自然传不到附加驱动上。

例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。

仿 ...
多谢qdb0901解答,继续问下去啊
1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
2、你能讲一下上述工作的一个大致流程吗?
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?

qdk0901 发表于 2009-4-3 12:54:49

通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。
每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
总是最上面的那个驱动先得到处理权。
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,
让下面的驱动去处理。

这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
页: [1]
查看完整版本: 由EDK对物理disk的访问引起的疑问