|
|
在EDK source中提供了对physical 和vitural disk的operation" k. ?$ `7 O6 B2 [) h& @
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件0 m z# o* Y. w1 h/ Y' Z& `6 k
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
' F) ]3 u3 G, L7 ]当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:2 a. o1 `* ^9 M
// set disk type,Physical or Virtual disk? and get the name
/ A# T E7 ^. e: Nif (DiskType == EfiWinNtVirtualDisks) {. }, ^% G9 s( [4 Z3 l8 @; f7 o
WinNtIo->WinNtThunk->SPrintf (3 w' ]' C( K: S/ q+ c/ W% u! Q
Buffer,
+ b: g2 m7 l0 ~' l L"Diskfile%d",
1 y# m/ A1 w" j WinNtIo->InstanceNumber) N& Q$ s; ~+ I9 f
);2 u# ]. @$ ^+ g+ P* s" @$ l
} else {
& g+ P' D5 |" O( L if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
& i U5 u \7 {4 W+ [ WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
0 P/ B7 v. ?' j+ B; A# { } else {/ j9 c* I, h6 [5 B0 ?
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
% w5 k( S* X1 X" D. R9 g }
6 S( [) N7 @9 H, U5 W4 C! G1 n, b: K//create mapping 9 ~4 q) S2 Q. Q( v
Status = WinNtBlockIoCreateMapping (
3 f8 X6 z& U2 r: o WinNtIo,& g: G1 I+ A0 s5 e$ Y8 R: W4 X
Handle,
, w- r. M: x6 d% ?$ I# ]1 I7 f Buffer,! w1 Y7 T. B u3 d# t3 ` N
WriteProtected,
4 S- r U" e y }7 a RemovableMedia,; K7 f0 ]: m0 S! H" P2 e; F# [
NumberOfBlocks,% {) g3 @( {. k j
BlockSize,
/ V- m$ }" x H: h5 s DiskType( ]2 r+ U s( g; ~9 N e
);( G: s0 r4 x2 O3 R r0 @: q
//register read or write blocks function* h7 |2 ?" b( A
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
. j& Q* v& I# n% `6 IBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
8 c! w4 E3 U8 s4 ]; b7 Y
1 ^ }/ x( i, A9 v0 n1 C1 V" f8 L//in the WinNtBlockIoReadBlocks,read file API1 J9 N+ J. {& l( a" f3 N
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);4 V$ u' o) f/ x$ X- S1 X1 j9 i
" X' d, u3 z6 T问题如下:
. `5 |- i* [# q# |/ BEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊5 `4 A3 @6 ]) F
1 B8 @: a; J: x5 B5 o[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|