|
|
在EDK source中提供了对physical 和vitural disk的operation2 |. e6 u* _7 C1 A. B X
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件/ A5 z+ }# F1 p J7 T2 |- o
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=5127 B0 h& \$ `5 |
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
$ ~) z/ q6 d7 @# R. x// set disk type,Physical or Virtual disk? and get the name9 o, V; h( t& M C" s1 ^) P \
if (DiskType == EfiWinNtVirtualDisks) {
0 P0 h, I0 S/ e( E+ l. x WinNtIo->WinNtThunk->SPrintf (
' S+ s1 d8 a8 j0 T; l Buffer,# ~; ^1 J' p6 T+ c
L"Diskfile%d",
5 `7 k* Z9 ^) t) ?! e WinNtIo->InstanceNumber. |' f5 k" B# i; J0 v
);% Z4 j( ?9 p" ~0 o: K: [
} else {0 Q+ x3 j# M0 [7 I% b. y1 V4 |& T; _
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {! O: O3 L! g! q8 N1 I8 C; ~( k
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
5 ~" l$ n% r! n- @ } else {
$ Z6 l c) N1 U8 w- _& s* h; Q WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
3 r# k6 y6 a6 ]: F# u. d! S }) x% f8 E- u1 S5 k
//create mapping
" R7 |( q! ^5 P Status = WinNtBlockIoCreateMapping (. o: r" u, R! l, t
WinNtIo,
; D0 A+ Q3 r; G* Q A0 ] Handle,
) _6 x y7 o1 X% B, Z+ O$ L6 d Buffer,6 W! I" x. C% _; Z
WriteProtected,3 Y* t2 |/ R5 s# j3 J
RemovableMedia,9 G$ ^7 C" S2 D
NumberOfBlocks,2 j0 c; R8 l, ~* f
BlockSize,
( `: |, e b& z$ Q- Y7 H2 Q DiskType
8 e& A0 M) Z# A/ y );/ j1 y4 m* C. G; V8 Q N% \
//register read or write blocks function6 m) q+ q- ^- J# ~* B3 q5 e
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;- F2 A: X" ^" w$ m9 E
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
2 t, q4 K( [/ w
& K0 `7 Z4 {1 W3 O$ m//in the WinNtBlockIoReadBlocks,read file API
7 e1 d9 f& E5 X% e2 K, ?Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);, Q0 {2 k- C; F6 \9 J, b
7 v* p- B* ?0 s2 b问题如下:2 U% Q( L" A0 }1 S; g
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
3 ?+ t! Q0 D6 N3 I$ Y8 D
' d9 |" S9 L3 D/ m B[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|