找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 8417|回复: 1

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation0 h7 n6 D# }$ U# W3 ?
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件) C4 w& u3 m2 j. G
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512: i2 x0 Q; f, E% B' c$ f' Y, ]. p1 w
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:9 J6 v. `: ~& t# D. g
// set disk type,Physical or Virtual disk? and get the name8 d' C7 c5 S% }6 _
if (DiskType == EfiWinNtVirtualDisks) {
4 s6 a+ a* Y" O7 J/ e5 N$ G    WinNtIo->WinNtThunk->SPrintf (
; \$ [- F6 A" i7 _- Z" [1 R9 s                          Buffer,
2 ]6 t( Y4 R0 R5 K1 a" d                          L"Diskfile%d",
/ S6 Y9 I* l" A' ^- L                          WinNtIo->InstanceNumber
* H4 [1 R$ G; o; J. R2 g& |                          );
* k! m- f- I  p* N) C  } else {+ I. ^- k- U1 |' N
    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
9 T; {: t! ^1 E$ _% b      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
$ E& S* P5 X8 r    } else {1 F0 _: A3 x( I. U( f8 V: K+ W
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);/ ?2 R( L, K& G& m4 Q" w# p' S2 H5 m
    }! l' r2 h. U( o9 E
//create mapping
* i. e5 d5 y8 E' ^5 w. f" ?1 c9 h' T Status = WinNtBlockIoCreateMapping (
' W" q, S) a0 `) N- N% n' V) t                    WinNtIo,
6 X7 N% m" O3 S7 ]7 x9 H# G' g                    Handle,
8 B5 L% D6 |1 T. u: k; C                    Buffer,
! M# b: e$ j% f1 N; @                    WriteProtected,
, M- x: ~- ^: }3 r# m                    RemovableMedia,
( n0 Q+ _" O# Z5 B1 J- X% G  V                    NumberOfBlocks,, g) h- Q2 L8 U
                    BlockSize,
7 s+ P/ z3 l& w: _                    DiskType; E" O  K1 }% f! Z0 c
                    );0 I0 {0 p( T8 i
//register read or write blocks function$ R- s# _, E3 q; L
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;" g* r% u& k7 q( |
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
: j4 I- P% ]" o: ~0 |+ W; m( H/ Y( c; R, @5 ~1 p5 _
//in the WinNtBlockIoReadBlocks,read file API
3 @/ m" }" m: y  l4 W: oFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);' B! t5 j6 M' A, }5 C8 w; e

$ Z7 p( ?% {6 O% V) `问题如下:
% _# e8 W( f+ C4 G& rEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊, K7 p2 m( S8 u# \$ E! R3 u9 U

& j- U; N* j* _- z) v[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ]
发表于 2009-3-24 16:52:44 | 显示全部楼层
没有物理disk controller handle,Win NT bus driver为所有virtual NT thunk device创建device handle.
1 ]' c4 ~  R4 h$ W/ `& J4 F' ^5 h# V1 C
参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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