|
在EDK source中提供了对physical 和vitural disk的operation
: w& p V( E# S7 ]. ^/ _- x& y8 Z6 ^参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件! M% z9 K$ L* s! m% p1 L% M
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
' b+ o# S$ u3 H1 y% _$ H) _当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
8 P. @% X& A6 S- W// set disk type,Physical or Virtual disk? and get the name; _; m& n, L+ a \3 z
if (DiskType == EfiWinNtVirtualDisks) {
9 S5 j1 R* A* M+ s9 b! { WinNtIo->WinNtThunk->SPrintf (+ S( [2 V% \2 q. c. }$ j" f$ d3 O* J
Buffer,+ ~7 g; r, \7 u8 } R
L"Diskfile%d", i) `1 o3 O+ k3 c' X% m* _* t
WinNtIo->InstanceNumber
) s7 O4 T0 H; {( M- F7 A- Q );
/ B+ ^0 _9 ?" J# E+ ` } else {
. f1 m- |4 l7 g& ^5 d if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {" F/ C+ I, O' l) W5 p' a- o
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);1 o4 O! G& B+ i. ^0 i2 e E6 g
} else {
5 A' ]+ l* Y) z8 q WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
9 b3 L% L4 B p }
9 b* E9 X+ H4 s( Z2 D//create mapping
# V M$ b" M- K. l. i$ E Status = WinNtBlockIoCreateMapping (
% `7 S. F5 O* q* J WinNtIo,
4 O( }8 g; Z% v) a Handle,
, E5 s; l, ~; s b! L5 g* m Buffer,
& X, S. h# N. t8 D4 _# @( e WriteProtected,6 e/ K" s' S; e' y) ]- |
RemovableMedia,2 C) S; x6 B8 |& ]4 Y2 L1 Q
NumberOfBlocks,
8 R/ @- P8 j! [$ B5 Q BlockSize,3 ?9 X& o- k, u# t U8 R- |& E
DiskType
! X3 d' Q' v$ F. }- P );/ ]0 K5 ]" i! l# a
//register read or write blocks function! K. n9 F% i" W
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
7 O* p3 g7 g6 }: ~$ z6 GBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;% \$ Q. h7 t) X# m+ L' c
) y% s# W' K/ |# {) h% V( Y) h+ x//in the WinNtBlockIoReadBlocks,read file API
' J, a/ P6 E5 T3 E9 W, }) q) e* lFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);3 O- Q- t8 n, ~! y7 y$ f2 V
9 u+ _4 R2 ~3 m' d! D# W# ?
问题如下:
3 E9 [; t* A; lEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊. J3 c/ z# k& N! B3 r
, E' y5 V4 j$ ^# E$ y: D1 f
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|