找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 8762|回复: 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下是不是可以获得对该设备的的完全控制呢?还望了解的高手给个解释啊9 U# J# I% R* Z  z6 i% G
0 r' ?$ u. G8 l
[ 本帖最后由 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+ S( R# f) M- _  H) E
之前追过EDK中的关于物理disk的访问,EDK source其实是通过win32 API进行访问的。现在有一个疑问:既然我们通过API可以将物理disk map到EDK中的NT32下,那么我们是不是可以map memory,IO,甚至于IRQ,如果这个可以的话,那是不是 ...

3 m2 R3 y5 k/ o, W4 B
9 J9 \  L  w: X6 y: {, f# Z) d2 \不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,/ y% h! v" o  L( l( A
9 E; H3 k( f2 R
例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。5 Y( R! {0 \; u* x+ t3 o# x
3 B4 {$ n8 R! b$ m% v2 N
仿真器一般不会直接I/O去和设备交互的,那样设计复杂,还容易和原来的驱动冲突。
# b2 P- z2 ]5 Z. l5 z! K0 D  y) J! Q. @6 B4 j8 g/ c. F$ J; |; J
至于内存,有专门的Section Manager来管理映射。
. \0 E% x% @8 b3 i
; [# {2 C4 _. c[ 本帖最后由 qdk0901 于 2009-4-3 12:43 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-4-3 10:49:34 | 显示全部楼层
原帖由 qdk0901 于 2009-4-2 11:23 发表 * D! s) C, P0 k; g, h" P2 n! a

! W4 Y/ X5 P. m3 Z% N; X2 s& c1 H
不可以,因为仿真的设备(NT32中看到的),是仿真器通过在原来的设备驱动栈上附加驱动实现的,
) R$ ?/ a8 b6 Q# i8 |你把设备都禁用了,所有的IRP自然传不到附加驱动上。
% X0 z  s: [9 u0 y! \8 E
3 b* S' q: i+ }! l- l, B例如你把磁盘都禁用了(当然前提是你能),系统都挂了,自然谈不上仿真了。
0 |/ A, M! ?9 e4 Q( T0 b6 y
/ u  y; _8 }- o8 p* L仿 ...

: ~! R" Y5 \- l  H多谢qdb0901解答,继续问下去啊
: r" `7 [+ R9 u' M) y4 s; V1、"是仿真器通过在原来的设备驱动栈上附加驱动实现的",你所说的"原来的设备驱动栈上"应该是windows下的驱动了?还有那个附加驱动应该是在NT32下的设备驱动了吧?
5 n0 r; F# j+ o' N2 @+ q% X2、你能讲一下上述工作的一个大致流程吗?
/ Y" }7 p$ d7 j3、那是不是我们可以通过这种方式去模拟所有的设备?譬如pci设备?
回复

使用道具 举报

发表于 2009-4-3 12:54:49 | 显示全部楼层
通常每个设备上都挂了不止一个驱动,这些驱动一起形成一个链栈。
) Y* N. W  Y$ Z' x( k每当上面有IRP发下来(即用户要通过IRP请求驱动去操作设备),
% i! {. E. P# v9 ?) g8 c总是最上面的那个驱动先得到处理权。; |( v' d/ m( q, }
该驱动可以按照自己的意愿去返回结果,也可以继续往下传送IRP,0 a9 ]# u0 B$ C$ e) t
让下面的驱动去处理。
* w& N6 k; \4 l
+ R( q) f, r2 W" x$ z( i1 ^这个很类似于dos时代的hook中断服务程序(如果你做过的话会很熟悉)。4 e! k3 f' h" w0 ]4 O
而dos下面的虚拟磁盘,内存磁盘等等虚拟的设备,就是通过hook相应的中断服务实现的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 14:44 , Processed in 0.021655 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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