|
|
在EDK source中提供了对physical 和vitural disk的operation
- {, M1 }$ W! l2 C参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
0 P) k' V! K1 y, h0 C7 F# V; ?set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=5125 _7 n7 o/ _/ `. @3 k% B4 q
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:/ {* k, G- M; j6 s
// set disk type,Physical or Virtual disk? and get the name
! b- S+ C8 k: D4 ?, K: y: Aif (DiskType == EfiWinNtVirtualDisks) {; N _( Y+ `$ v8 F- a- C3 b J
WinNtIo->WinNtThunk->SPrintf (5 ~% I2 R# S% y1 n$ _
Buffer,7 C% ?$ }# L, j4 o! S: r
L"Diskfile%d",9 Z. g- f' [2 B5 F6 C
WinNtIo->InstanceNumber
+ E! J& A: e( `( d! R );
9 ]8 O( _0 T' g n9 g6 x/ q% y } else {& f1 B! e! E/ K7 ~/ Z. t% d" c8 P* k
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {: {2 n3 _! j: |9 @
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);0 v* B1 V& D% o# R9 S
} else {
8 N! @* A' l, [- S& `$ K$ m' Y: z WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
3 y( S' S: R) j4 H6 x }
! i8 Z3 v0 D& i8 `//create mapping 1 I2 d- T3 g* _. d) m& Q
Status = WinNtBlockIoCreateMapping (
9 m9 k; P, }: S; I7 q+ n WinNtIo,& j' s- V: ]( n" x" Y$ g1 |% d
Handle,2 L* j3 V% U5 c9 p8 R* _- M
Buffer,
& u# R3 \( C8 m1 H4 | WriteProtected,) c9 w6 z1 V, {9 q1 v9 M! k
RemovableMedia,
0 s5 m# y% j5 F0 y% B/ _, N NumberOfBlocks,; P* \( \9 w9 F: A
BlockSize,
* g# B: F4 ` X& p d DiskType
9 N) d) n; U9 X. Y' k );% Z5 r* T, \+ e& K0 k
//register read or write blocks function
. F) _4 E% {; j* W, I3 m3 LBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;, C8 I( X- r# I: ^
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;2 i' p4 n$ C9 I) g' v
% O2 D* x3 g. e# ^, q' z
//in the WinNtBlockIoReadBlocks,read file API- c; E8 r) n. ~* p$ n W
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);2 d( o4 ]& z1 w# v- l7 h
' b) j; d# Q6 [问题如下:% l( a: s5 [7 L3 n, R
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
1 X8 |( Y( T3 _( @7 E9 o. t6 w* z4 M. ^
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|