|
|
在EDK source中提供了对physical 和vitural disk的operation2 @ ]9 ]3 q/ W% {
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
; |5 c5 f. @) z) R' Lset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
# B) N4 c8 f# A. G! j1 a D当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
8 l/ T6 i' L; O5 b// set disk type,Physical or Virtual disk? and get the name
) z/ N6 [! w: Mif (DiskType == EfiWinNtVirtualDisks) {, T! X, _) o, p0 }
WinNtIo->WinNtThunk->SPrintf (1 H6 H4 ^( |9 b7 Z. s
Buffer,
4 j* a8 O- j: \+ [0 Q* X7 E! ? L"Diskfile%d",
& m3 Y* a% h. n _3 [ WinNtIo->InstanceNumber2 J6 K7 K& L# ]& s8 J) R4 d
);, c7 z* d" e" B! `9 p: @6 \5 [
} else {
. [+ a0 q7 [4 I7 f- \ if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
* @4 g* w/ ?+ Z# u: p WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);3 A" H; ^) |2 F \8 T
} else {
# B3 q& q x- r: r WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
0 G! S; v% K& v' y' b u2 R' n }$ x- p8 _9 S: u- I, i
//create mapping
2 \6 Z5 J4 ?/ [( j6 f2 f- _ Status = WinNtBlockIoCreateMapping (
! Z. e/ Y/ b% i4 z1 y WinNtIo,
* r* b' H( ?4 f- @ Handle,
. |5 f+ s& A3 @ Z: r Buffer,. J. H1 K1 T& H7 w
WriteProtected, w0 C7 I" r P) k; p1 @
RemovableMedia,
& x0 @* `& O1 G7 ? NumberOfBlocks,: |5 y' a* E- t5 o2 M% l e
BlockSize,7 N' p8 }5 q' y8 |: h$ J1 K) j7 f
DiskType! [ H" m' R; q% I3 F* K
);4 o7 b5 v# r! `9 r5 X% B
//register read or write blocks function- H! \ E" G4 b5 c: O
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
# o4 c6 q/ [* \3 t4 IBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
0 J+ S: D% ~8 A6 X
. c- K1 J* \% X) [0 a% \//in the WinNtBlockIoReadBlocks,read file API
+ x! [. v. `! F/ dFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
! o4 \; o# q5 D J, Q) h4 k0 c5 q4 f5 G( ^9 T) a8 w; o7 p, \4 l
问题如下:) L) e0 C/ x7 I5 ?2 J+ d% e
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊4 ?2 I* n9 ^2 k, S
2 z, w T/ ~, f" Q: P5 [$ C
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|