|
|
在EDK source中提供了对physical 和vitural disk的operation
) j& [! |; y, e* [1 e: J参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
. a' w$ \7 }4 c% w2 u0 i" eset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512) }& t' S; R7 Z1 W b5 G& N1 E
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:6 x+ W' Y( n* G" }, [
// set disk type,Physical or Virtual disk? and get the name
( L4 W! H6 x \3 m8 Uif (DiskType == EfiWinNtVirtualDisks) {
$ y9 j) {) }, T# } WinNtIo->WinNtThunk->SPrintf (
" Y h$ {( M& B Buffer,( ]6 i8 b% R7 f- [& l j+ k
L"Diskfile%d",
: h& `% z" B7 ^7 o3 F WinNtIo->InstanceNumber) \0 |$ {' |( W/ j7 \* v- s
);
0 p, }+ Z9 J6 f. { r u+ y1 {: B } else {
. Z/ s( e! ~; U( b if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {! V- t' H: A5 l) i, B
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);, O; T# J4 p8 X4 {' Z4 {7 I
} else {
6 c, k5 ^1 M( R0 D6 @' z WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
7 H8 g$ w1 V) [) ~$ U1 s! H }' b# \5 v4 L, a$ i4 P6 q
//create mapping ! b5 I. p$ w% T4 d
Status = WinNtBlockIoCreateMapping (
! f4 s; n5 t6 a$ y WinNtIo,7 G+ O' U3 I% y1 h
Handle,
% X' e6 V7 ]. [3 l0 ~* v1 W* t Buffer,5 V0 e: _4 g) Z. t0 q5 m
WriteProtected,
) a% {0 d6 {* ~! Q$ ~ RemovableMedia,
' ^+ k6 z' D9 g T( H NumberOfBlocks,( ?$ L3 o& Q7 z. C. U
BlockSize,9 [) ~: Z( f* ^+ r- e# O3 T5 ^+ W
DiskType% x$ M4 @6 c, ~: }
);* D. o2 l) c0 G! f+ }) ?" ^
//register read or write blocks function8 V# D% i1 D- p0 [- ]# Q
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;4 z7 P9 A0 v' X* f
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
8 ?7 l+ r% ?1 n4 Z, ~
% t; E7 T$ {3 D/ K4 K5 S" h0 t9 @//in the WinNtBlockIoReadBlocks,read file API
' q# F4 \. y z, j# z" ^0 nFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
1 h$ M3 c& F+ Y; ^9 s& }7 V: l$ I9 t8 f0 F/ l
问题如下:2 D8 L+ P# q7 J) U1 C
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊 ]1 }" g: l4 v6 t/ g8 T& n9 E
3 a+ s- X3 d' ]# Z) E4 h* k5 K[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|