|
|
在EDK source中提供了对physical 和vitural disk的operation- R& B# J4 o1 V5 m
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件( p& o/ K# M/ K
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512: k: @+ G2 s) ]# `+ }0 O/ @! ^9 V
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
: X, U/ _ a. ?6 m9 a, h// set disk type,Physical or Virtual disk? and get the name
* e+ X- s. X- y. Mif (DiskType == EfiWinNtVirtualDisks) {$ k. v _: ^ y. A
WinNtIo->WinNtThunk->SPrintf (
6 g! ]% m/ [% N$ }* n Buffer,
9 o; d- X: s# O8 Z. O L"Diskfile%d",
3 b8 S4 j+ s3 B4 S W WinNtIo->InstanceNumber
# u7 L) b0 ~% I7 o- t/ Q% \ );* z2 R/ I; n8 T
} else {1 l m& C' @; y
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {2 I8 b' }4 I. F+ a1 Q" F9 F
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);9 _! q2 N! c/ q; f
} else {% f7 P7 l7 D. q; U s# C) J
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);7 o/ r" Z9 ]! N) N
}' _! ?7 p) r7 D7 w1 T: _4 H
//create mapping
3 w' `7 G: k7 V. D Status = WinNtBlockIoCreateMapping (( X8 c Q! ~7 @9 _7 [% }. u) C
WinNtIo,% Q; a9 L3 ?3 `* [- Y" I
Handle,
! X# p7 D8 o5 P! K Buffer,
6 G8 ~& p3 j0 j! v& y. x: L1 ? WriteProtected,9 ~; k; v5 o0 }% h* x
RemovableMedia,
2 J4 m' u' V$ Q NumberOfBlocks,
) B, z5 z. f) q! p* o. I* c' k1 r BlockSize,% v* w$ @+ ?/ y8 U: F) ~6 m5 j4 m) ?
DiskType
8 ]+ h/ s1 g e; G* Q( i2 v. W );
! w% R- |; ~* |//register read or write blocks function
6 I( A) N2 l u8 b! x% BBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;; l! b# P0 y9 U! \4 w& F
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;% }; H) s K% H2 T- C
\% x; e1 r- b \# |
//in the WinNtBlockIoReadBlocks,read file API6 z. L5 u# z' W6 g
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);: h2 \) P6 [; {3 \7 |3 p
1 v; X( g9 T( \7 B! p* D2 G
问题如下:
4 Q2 \. M7 q8 G6 KEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
`% p' @0 C# M2 k& I$ p- j' j5 a0 n1 T
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|