找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9690|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊
( a: w2 e" E9 J  A& o) @
7 r' ?* u9 n6 S2 R& J$ s3 e7 |[ 本帖最后由 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 发表 " b: I/ A* ]8 r0 f2 T
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...
$ w) [$ h" C2 U
5 s1 t! ]  y) H& {# x; x2 T* x
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
# P2 N2 e2 @  f. K$ K% O2 q$ u4 S% S6 @: ]7 |
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。- Z! W# p8 T" D3 ~0 U+ z2 z
4 q8 z* n: {6 X5 J+ O5 X# S
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。. i3 {! z, B* r; y( }4 s
6 z0 t' k* H" N. m/ Z
至于内存,有专门的Section Manager来管理映射。
  w3 `- t& r& S
1 h9 U2 p* b& W9 e9 z: m! a[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表
' M2 q5 O  A2 m0 m8 F
2 S) {3 H! C3 X/ y0 n4 g6 }. m7 P/ r3 s
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
* c2 }+ n3 t. a% G  v% h你把设备都禁用了,所有的IRP自然传不到附加驱动上。
  H0 y- t& O' V6 I
) V% i0 t* D9 ], l例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
% m$ }& L' Y/ U. l# k. S6 L; u3 Z9 s6 O) m
仿 ...

  K8 Y% ~2 [% y* }5 n多谢qdb0901解答,继续问下去啊+ d; f+ @6 y/ Y
1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
# n% P% B) B1 X4 o" i: S) t9 p* U2、你能讲一下上述工作的一个大致流程吗?
+ a( P- {( e7 Q' H9 o3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。2 L2 i1 |5 C! Z5 D
每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),4 k$ T' q4 ]& T, P& t7 f
总是最上面的那个驱动先得到处理权。
$ f+ k% k2 P2 ~4 W! H该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,, |4 P. o" a' \# @) {: x
让下面的驱动去处理。" Q! v: p; w+ B) G  t

# Y& d- T' B  t. B1 d这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。2 @, ~4 d1 s1 L$ |1 w+ @7 t
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-1 12:43 , Processed in 3.521871 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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