|
在EDK source中提供了对physical 和vitural disk的operation$ K) p, ~) o) C( l
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
- n8 Z. g* E# @* w$ T2 v; vset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512' ?6 D+ d+ s9 t/ i
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
( f. \. S+ z. ]( x// set disk type,Physical or Virtual disk? and get the name- s# F# R! r+ D9 C
if (DiskType == EfiWinNtVirtualDisks) {9 `$ G# H; Y# W A. D( l* ?
WinNtIo->WinNtThunk->SPrintf (
5 g3 e$ x8 F$ W2 P" Q9 A Buffer,7 I1 \& g2 V3 f
L"Diskfile%d",1 c$ Z0 i0 \6 P8 z
WinNtIo->InstanceNumber0 L8 ?$ J+ W' ?6 d
);
% _- y u [' H. I. B+ j: S; H } else {0 B! z2 q4 w, u( h
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {1 N* F# Q9 F+ z% g
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
- X7 W$ u% u# O/ S } else {; G8 }; e/ M: ]( d4 U* ~( V i
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
& W8 A! V- I- o M4 k r }6 O2 U/ @; Y) Z! O
//create mapping 1 p% d5 i8 {0 |7 K, x( ~
Status = WinNtBlockIoCreateMapping (, g* Q2 ~( R- ~* v0 F3 v$ ?
WinNtIo,, r- V& `) {0 H$ ]: b, C
Handle,1 i* X; }& _9 e5 N1 g
Buffer,
# Q' M$ s# b- Z! @3 `- C, R: s WriteProtected,9 G7 w4 s% k" Y& G
RemovableMedia,
4 k1 M# [3 d2 l. \, s- Z9 e9 J NumberOfBlocks,% T" s1 {, H2 c7 {
BlockSize,
2 `/ W& D- [' F& ~. D5 f DiskType% R1 x/ ^6 d# n6 q3 F9 d
);7 l$ w6 o+ |2 C/ j [! c5 e$ `
//register read or write blocks function
4 e& I6 ~+ s& q6 t8 MBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
9 K+ S! R% _0 m0 C8 @ `BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
+ q% b' w+ r3 [' _9 m) e8 y4 |" Q1 C- R0 ?4 Y! y( v& x I
//in the WinNtBlockIoReadBlocks,read file API; I8 D% s1 T" T! t
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL); Q: u& f7 c/ e* y4 b. P
( z2 a$ l- h/ r+ R# U问题如下:) K2 [) O, b- r- l& q9 l" s% ~
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
; D. z. ^/ X+ v m+ X! S: m( w2 O0 p" [4 w H8 R3 Y
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|