找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9550|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊
( g! J! }  q* w# T. ~; u8 s3 p$ a5 Y" `: N
[ 本帖最后由 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 发表
2 |) F3 J$ j* i+ U2 m# j2 @% i4 E之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...
5 I/ I( t( W* W8 d1 [9 y

  d) v7 N! ?" J% ^6 A" t$ W不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,/ j; v) S# k* e; ^/ Z& ~, R' x
, n! F: b1 ]$ g+ W$ j/ V6 x. I
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。; M( Y  z+ C# E5 {' M
" ?# v2 B2 ^+ V; _8 B# P* C+ i) B
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。9 m( t; D" m- s$ M/ L
& g$ b: @3 v  }' M# r" `
至于内存,有专门的Section Manager来管理映射。
( V1 F& `" O; ]4 `& w( B( g8 h& Q/ r: T. c. K
[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表
( h- U$ K; K% L! s1 {' I, d8 `( s; q! q3 w* p

, q$ ?+ ]4 Y, D不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,' H5 g8 D$ h( S' X- \
你把设备都禁用了,所有的IRP自然传不到附加驱动上。
% T$ Z: y/ }* P8 J  M% h" O5 y' e/ J/ ~0 ?3 N: x2 a; W
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。2 R$ @1 l# r/ e2 P9 @# u: Q* t  |  e
! f9 h! [; j: c$ B% |# [: O+ T
仿 ...

6 r* U+ P0 @! y5 f! c4 j多谢qdb0901解答,继续问下去啊
0 Z) y7 I, S2 B$ p* L: i8 t: \  v1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?) q9 V( ^! s' n7 J8 D$ q# w' N
2、你能讲一下上述工作的一个大致流程吗?$ I6 {4 K& F: r9 c( J
3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。/ T# U* n; r5 M+ z3 r7 ~! A
每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
) a7 d+ E6 ]. ~( W4 p' C总是最上面的那个驱动先得到处理权。
) x8 d2 x' z5 g1 m' v9 j4 Q该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,2 h. a; O2 v5 b5 Y3 \, ]
让下面的驱动去处理。6 u3 U& P6 ^* t) w2 t0 g- D# i  _3 B

  X+ f, k: K& ]8 [这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。, {$ j& a: o5 y
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 08:35 , Processed in 0.691824 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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