|
|
在EDK source中提供了对physical 和vitural disk的operation
- x+ A3 f; {" Z+ s3 O参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件" P* I+ F& {0 Z; F# O) E. Z
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512; _) }4 w# H* r9 |
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:4 ~# e) W) `7 ]6 }$ A z( Y
// set disk type,Physical or Virtual disk? and get the name
" o/ r6 G# c; T5 i7 Dif (DiskType == EfiWinNtVirtualDisks) {+ q8 i3 J) ?& j# }9 x) h% }" z
WinNtIo->WinNtThunk->SPrintf (; p% r$ i \+ ?8 r# h% i
Buffer,
; H' H. ]( ~+ q. n9 \6 N L"Diskfile%d",
. F+ X C/ W+ H$ [ WinNtIo->InstanceNumber
* D3 N6 I0 k9 G8 L% ^! ^/ Z );
2 O! |1 ^0 m) k* Y) O \7 b- V } else {- m6 H4 F( ~6 J# @) A5 C8 j
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
3 y7 E% v L0 g8 h& A0 Q WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);3 ~$ J# m% q( Q# N/ t
} else {
# [; \: L& G& N# K0 h* s WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
& d( ?$ V( z4 U1 \6 v }
6 V. }9 _7 }' C0 P//create mapping
* h% n7 c7 l* f+ v4 M Status = WinNtBlockIoCreateMapping (
+ o8 z( ?, ^) v* O0 | WinNtIo,
# k9 G& u2 [7 u7 r; m; C% ?1 ~ Handle,- _8 [( Q% |1 m. A+ a2 n( g9 C' }7 U
Buffer,8 r* z; u- R. Q% j2 d" B' o
WriteProtected, m5 d R) Z- i1 |9 h
RemovableMedia,! s! ^2 C* m% h o! h( k0 b4 p" E
NumberOfBlocks,
% T! G" {+ ~% x# \ BlockSize,
! P0 { F9 ~( ]6 v% A+ ] DiskType+ T5 Z6 x. b% N8 D+ U3 U* M/ H
);& L& V( e6 w0 s0 u
//register read or write blocks function
6 a. |* M# Q( M& t9 fBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
8 H6 ~0 {( H( PBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
7 O; u2 v( U t; g, q# K: @- P
+ j" e* N7 _4 q4 U//in the WinNtBlockIoReadBlocks,read file API' M1 Z5 o+ N" s4 m! ^% v4 m( ~" R% J
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
0 \8 l4 G# v3 q
6 b. O. S+ ]' r1 u) s2 g: w问题如下:
) r3 J6 S" l$ X/ P( cEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
1 w: e5 O$ f# p9 D) ~
9 N+ d1 U! B9 j* n[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|