找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9911|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊
% n0 N1 s5 b: Z, y! p8 C& ^! t9 @# d9 s
[ 本帖最后由 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 发表 $ O) x/ I3 ^( w* w' D' J3 k# m
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...
) b! w3 g1 |8 g3 v

+ ?& k/ [' E7 n不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
& i3 l: l& H' H# X" M
: C$ z% H0 H  F! v% g% ~' x例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。% A# G0 h, q* ~* j* m. a
3 W  s* c4 r5 U) I- X2 X7 K2 R- Z
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。
- i$ I4 L* ]1 D# R8 C9 |( h6 K# J2 ?: Z
至于内存,有专门的Section Manager来管理映射。
3 q' z% ~- c1 S. ]( q3 U( r; U. \
% k% g6 y/ S# u[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表
6 N5 ?1 ^1 D% X3 s6 S1 c- A3 |
% i/ G3 ~1 C) ~/ g0 G+ b
3 o7 e/ r8 g0 U; _, l5 s不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
' p5 Y2 u1 c8 E- k; ]你把设备都禁用了,所有的IRP自然传不到附加驱动上。
2 E; n+ y3 V6 p5 C8 U" }: G
) u1 {& d' K: E8 H0 ^例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。8 [, @4 n# g; c) `
5 d6 p5 @5 ]4 |+ o
仿 ...
' s9 Z6 c* ]$ A; y
多谢qdb0901解答,继续问下去啊
3 E% w& e8 t; g1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
1 @! |* {& X( z1 o  W2、你能讲一下上述工作的一个大致流程吗?" R- ?+ t: V3 ~- y) p
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。
5 ?1 w" v4 H) L% O  W# h每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
+ R- i  ~4 y) ^, a' h- x总是最上面的那个驱动先得到处理权。* k7 v& b1 j# Q5 u" m5 U6 u# s
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,' t5 A1 L6 s6 b& a, ^% F
让下面的驱动去处理。
' o: U: _' V8 c& i! x& D3 V+ r+ O. V% ~& E
这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。
0 [/ J7 K8 V( r* u% \) f& O而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-16 07:34 , Processed in 0.084334 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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