找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9439|回复: 5

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

[复制链接]
发表于 2009-3-31 20:30:12 | 显示全部楼层 |阅读模式
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是在windows下disable某个设备,然后在EDK NT32下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊& |: I7 M% `2 J

1 @& ^& g* `) p- P( u. B2 l[ 本帖最后由 libeili 于 2009-3-31 20:40 编辑 ]
发表于 2009-3-31 21:11:59 | 显示全部楼层
你是在讨论仿真器吗?
回复

使用道具 举报

 楼主| 发表于 2009-3-31 21:15:15 | 显示全部楼层
对啊,就是在EDK的NT32环境下
回复

使用道具 举报

发表于 2009-4-2 11:23:29 | 显示全部楼层
原帖由 libeili 于 2009-3-31 20:30 发表 % K  U9 i8 G/ u% D5 E9 P1 M7 S6 b9 \
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...

# b9 p2 k% K4 @0 p* @6 v4 y  G& ^) Y' S, d3 j: U7 s$ x
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,) x. l2 @- a6 k. v! S4 c  q- b

" @( w6 s$ u9 S4 Y! \! W例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
/ U* y- b0 ^: |" I
7 o/ |* s. X. l2 b仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。
; u  q; D" N6 U" {
- x$ P. X  t& W至于内存,有专门的Section Manager来管理映射。
5 w2 d% q$ ?7 N5 a5 Z! E
) z* J# u; t: Y6 y9 m$ W[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表
) V- q4 j- d7 q4 D( p6 f( J0 z) {1 s, y$ Y" r
# k+ A6 l' }+ `/ w! ^
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,5 d4 @) W0 \/ C' }6 E# L. c. }
你把设备都禁用了,所有的IRP自然传不到附加驱动上。4 O; [+ c+ T" N& U- |

) V- }) J6 b. u例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
3 c# K$ t1 ~: C5 x" ~( o; \- U+ }& v( k1 s7 e$ G2 c
仿 ...
3 g: w+ k1 Y1 }" u+ a
多谢qdb0901解答,继续问下去啊9 P6 M4 O5 I9 [, D
1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
1 O2 t0 b, U+ x+ _  N# \+ V2、你能讲一下上述工作的一个大致流程吗?- n) K- R/ ]& R7 _" H/ Y
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。
+ }; ?& ]) k' Z! Z9 m3 l每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
! Z3 E$ @3 z4 [) W( _总是最上面的那个驱动先得到处理权。( o6 {% K8 V9 O* ]
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,2 v% ?, {$ G8 u- b
让下面的驱动去处理。8 |) b5 t; a7 j7 |
# L9 k! ]- l8 D) {( t8 g
这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。
: p  [% q' e- S2 I6 ?% l6 o而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2025-6-17 15:08 , Processed in 0.099480 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表