找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9959|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊8 x. t9 F, x8 x1 u
3 q* N3 w6 {. ?9 f$ y* v, d( U
[ 本帖最后由 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 发表 3 q9 e  e/ \9 y
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...

% l6 `+ X$ U3 D% u
$ D3 q& s( T* c* U# S" A& |) K不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,! C2 |! I( r% L

6 S7 }# \9 c/ P- n& [例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。7 H' N9 x! o: \& T* g5 O$ E" T
7 w$ _( m2 P8 H( A7 E2 l$ l
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。* h/ t  j2 u8 f; F1 u

  `& d6 n7 O. h' O& m至于内存,有专门的Section Manager来管理映射。9 c' F! a7 L& H, A' P
& m- }9 F8 w" N* Y# d
[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表 , f* _! y. K  A, l2 o1 Q" s

: Y  L. {$ k8 U. b/ X# B) k# g* z' c  \( M8 O8 @
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,  ^' n# e: `; j( P' P2 A
你把设备都禁用了,所有的IRP自然传不到附加驱动上。
; f1 y1 Z- h% C3 J) X6 ~
+ r: k4 U8 Z+ c& Y9 m# c例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
; G9 p3 c1 G* S4 R; ]9 T0 r4 V% p5 M- W1 _/ P; z8 h* ^
仿 ...

: O$ j5 c3 D& h/ k. g多谢qdb0901解答,继续问下去啊0 _9 T% F! T4 |* g
1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
0 l2 w+ |8 V: J. e; q3 [2、你能讲一下上述工作的一个大致流程吗?& _8 X! C* ]4 f2 h. `: b
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。0 D- R; r5 {! X5 V8 h( `
每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
* L7 {+ h- W/ {6 {总是最上面的那个驱动先得到处理权。' N9 ^8 _. M' g0 f$ L. R* F
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,
& @; ?6 R8 q7 O( {/ V! r让下面的驱动去处理。) |4 o8 O$ \% x+ o3 w2 D

: d- |; s/ z, D: M) f) T2 d! [% u这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。7 Q* g3 q: J% T; B& `: Y
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-4 19:01 , Processed in 0.042728 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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