找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9396|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊0 L7 H& F' ?1 F1 F/ _8 K

$ D3 \- h% s4 t* N6 S5 V6 M[ 本帖最后由 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 发表
1 n# H6 Q% Z" f- J9 K8 ?  X之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...

% T# `+ t4 x& L1 q& _  V: r9 D0 c1 t
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,8 l' M3 H5 z/ C4 _

' q! G$ k1 {* d例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。5 u4 I/ T6 ^/ |% r
: [6 y9 H+ o0 n5 g' b# ?" y( \6 [
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。' @0 i! A, e! h

* l  q; C7 j1 H, h5 m) G至于内存,有专门的Section Manager来管理映射。3 t8 K: E: U$ X7 k1 M; u

/ c2 D9 P3 w+ u# t. }[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表 4 a' M9 p2 g3 R- O
) ^* Y! L& A/ [, V* [2 k- K

& g  |  }6 I& R不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的," R1 {: p8 f+ m; d4 c) s
你把设备都禁用了,所有的IRP自然传不到附加驱动上。
0 }$ I( |1 T2 Z% L' f0 f' }: `$ r! o+ y) a3 h: T, K+ Z7 V2 t
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。' E1 l) x" Y) C

6 M6 d) g+ E1 v* b2 h0 _仿 ...

6 t2 W5 u$ z5 Y# l9 I  @) ^2 {( [多谢qdb0901解答,继续问下去啊
( X# ^9 E* B8 O1 E0 g5 n1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
" c8 Q7 y! _- v) o, h& Q+ s2、你能讲一下上述工作的一个大致流程吗?9 t. S$ _% r) @
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。
9 F# U; C( x* ?+ o% ?3 e每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
. m/ _2 D0 X' z& ~7 v总是最上面的那个驱动先得到处理权。; O/ n' o5 t& q' P
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,
! [9 i9 @; \& L0 L0 h1 H+ a8 X: l5 M. l让下面的驱动去处理。
4 N& f+ t* j6 E& L& ~, X" S7 s& x1 F+ D3 C( Z
这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。3 s- v7 q3 U1 M& @. ^! E" O
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-23 10:32 , Processed in 0.045664 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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