找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9779|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊
# W) z7 q; r* M  `2 `( i. s7 @! [7 O( x' {) n( 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 发表
% _1 k! P7 Z8 f  p; O6 Y) ?之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...
& ]/ m9 D/ O! X. D/ J2 E! r$ }

+ k9 I3 y1 c3 Q2 b  A% |9 h9 A  z  y不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,3 S8 P( a3 p* Y. G
: z5 n6 e; {: t  _- g
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
7 C) Y8 w$ X) w0 [9 ?7 E' D) U; T- U, ]: Y6 z/ k
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。' w, O9 b* [. d! c9 r
: Z- O  }# w' m# Y3 g
至于内存,有专门的Section Manager来管理映射。
  H2 a; E( S+ @& R9 e2 w% L- {2 w- @
[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表
6 a4 e6 M3 H) ^3 D* d5 O  y! M$ ~" Z& C
6 m( L+ z+ r( u
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
; ~3 R6 Q% _/ \0 w# [  }# A你把设备都禁用了,所有的IRP自然传不到附加驱动上。) ^7 |8 C8 h9 }+ F

4 o1 s4 X3 V* W- y; s4 D; a9 [/ d5 T例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
% E6 e9 i$ h  b& S% V$ n' [, \
$ F3 w! ~1 d+ e' w7 [% _仿 ...
1 ~3 V4 @1 A2 W2 _; I+ H
多谢qdb0901解答,继续问下去啊
! o+ G$ }+ \+ U- G2 \$ J( _8 J/ C1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
" p1 S1 t. {, l2、你能讲一下上述工作的一个大致流程吗?
5 N9 S+ [1 z* w3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。2 M) M4 z) A" q
每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
+ J3 r2 y9 V$ l总是最上面的那个驱动先得到处理权。% Q4 w( ^+ f9 v. z/ M
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,9 f: {0 J; ?7 E7 {8 m6 e1 ]
让下面的驱动去处理。* Z7 i, {+ G2 B# E0 h6 U
. Y# r1 g+ z  Z
这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。- p& v( R3 W% M$ f; d% ]# Q
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 17:38 , Processed in 0.052336 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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