|
|
在EDK source中提供了对physical 和vitural disk的operation" v& I. P8 r' X1 ~: a/ i
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
4 Z D" s& d$ F d' rset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
: A( w4 j, w1 f- y& u当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
4 M0 C9 j& O. G( | M4 r4 M// set disk type,Physical or Virtual disk? and get the name6 r/ r9 P# v! p7 ?# i
if (DiskType == EfiWinNtVirtualDisks) {
7 p% s& P2 o! b( K9 b- z WinNtIo->WinNtThunk->SPrintf (
0 U8 [0 ?- f* j Buffer,
I7 t2 k6 u% A/ D L"Diskfile%d",
% ]2 f! J1 E j2 |) f, U: ? WinNtIo->InstanceNumber
" R' B$ ?' O1 m3 Z4 ^ );4 I. [4 n( j$ s7 ?- W1 d' r
} else {/ o4 B" g3 `; ~8 C" M0 Z! l
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {5 j; G5 h( [3 g5 e& b
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
9 `# W- L! U) s( p( I' s( M } else {9 l) d- s7 r; [2 U7 [) A+ `) T
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);8 F U4 a1 s' c
}
- Q: e$ z# C, d% _% ?1 D//create mapping
7 J }. G3 `$ F: L6 k- L) i Status = WinNtBlockIoCreateMapping (5 o0 b7 X+ `" W u. j
WinNtIo,6 B+ n! y) G: F7 _; _$ G# w! }$ c7 O
Handle,. |9 z( \: @ c X; ~
Buffer,
6 ^( J) }7 e) n WriteProtected,
& n( Q/ @+ m. q9 B' j( B5 |4 g+ d RemovableMedia,
2 |( |7 s/ Q( ]8 T ` NumberOfBlocks,
9 E" \6 q- C: {$ W BlockSize,2 P) a5 H) ^: A
DiskType
, o/ f- U+ k- N3 K* `( L );9 _: A' S" O5 b
//register read or write blocks function
% v/ b8 w" G' G$ U& PBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
( z5 c2 z" X9 h. l! r9 ~BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
) y3 Z/ ?5 {3 F0 W6 X, q+ z( V- k& ?0 q6 X. @' I" C, Z* o! b6 Q- t( J! l
//in the WinNtBlockIoReadBlocks,read file API3 u7 I& ~! a7 u8 _' n% O; i. T! w
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);! }- }% G. h/ j" [' {9 k4 V4 n; U
7 ^# s3 x, A6 v5 \问题如下:1 |3 s) r1 ?4 \+ j, Q8 Z: T
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊0 Q) g' ^ D2 v3 ]0 `* e3 [
7 T8 _# Z( Z' M) T
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|