|
|
在EDK source中提供了对physical 和vitural disk的operation
; [$ l# h a- O6 P参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
2 d- ^* F9 u# j- X2 [set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
' T0 U* J0 H9 [0 {8 t当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:0 T2 o: A0 |8 @- x) H! J% ^& N
// set disk type,Physical or Virtual disk? and get the name1 J. X, u5 a. K& }6 V
if (DiskType == EfiWinNtVirtualDisks) {
! f! Z7 h$ |2 m: V. d' y e WinNtIo->WinNtThunk->SPrintf (- `/ T B( G0 h2 t( |
Buffer,
8 t) v3 j/ g4 n2 x2 {0 z L"Diskfile%d",
# r$ T7 f2 A0 \' y1 G2 G ~ WinNtIo->InstanceNumber
. k, z d3 r5 P8 x4 f* j );5 f6 a2 B; P" V
} else {+ |' c; ~7 @( ~; [5 \ z1 L
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
+ Z9 T, @' D. {6 c0 ^6 b WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
/ L b. f: H6 k& C9 ~ } else {( m- y9 ~6 m. `0 E: y
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);/ p, [2 C5 M5 n5 h: I2 W4 W- J
}7 Y( [6 c! c- {6 \! L x
//create mapping
- J0 S4 s7 Y& M( n9 k) i+ M Status = WinNtBlockIoCreateMapping (
" j3 H6 l3 |8 j$ M8 C2 i WinNtIo,
8 u: z" ?. ?2 j' W& B1 c Handle,
5 f, C. V9 s& Q Buffer,# [( K3 D) {/ J/ S0 `
WriteProtected,
' e9 R$ D* K' y! U0 I RemovableMedia,2 ]4 }% R* w0 q& }8 ^
NumberOfBlocks,
g) s# M8 g9 {8 x) k D" O. F N: F BlockSize,
% e1 q! N, s, b DiskType: S" d- k( {2 c! [' v. Y: L
);( p& o% F# q8 Q4 K* g
//register read or write blocks function
. h( I8 R& h, n. e& E" _( mBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
0 x0 ^" r( ?# w4 Z3 d9 zBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
. W' j. f7 g$ J4 e& V/ K' ]& T' W: j+ n! I
//in the WinNtBlockIoReadBlocks,read file API8 `- M1 n! h- l# A! H$ H
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
' s9 R. k5 J+ e0 ?+ J+ @" S
" ^* I. z6 n3 H1 C问题如下:
# ~- g" M. V) `1 @EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
2 b/ r( C& r1 |- f: b$ H3 Y
2 u$ ^# w. r! w4 _$ ]- V[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|