|
|
在EDK source中提供了对physical 和vitural disk的operation2 W$ p/ ]# D9 u! B. R0 |
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
; B5 D% J' I; ?+ B6 H4 sset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
: h# j' l8 K& ~& {% G; O当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:' {7 h& z9 F( Z! A6 I4 {* ?
// set disk type,Physical or Virtual disk? and get the name
; L- ]* u- J& t' h; W( Vif (DiskType == EfiWinNtVirtualDisks) {
8 E- R, |3 d$ L WinNtIo->WinNtThunk->SPrintf (
& A" \4 d5 s8 _0 c% v* y, N, E Buffer,& Z# u0 U2 l. A, l9 M
L"Diskfile%d",
/ ]8 Y8 d' w) v. m7 { WinNtIo->InstanceNumber
# Z) }+ S' I3 ~$ ^! Z3 A );
- Z- Z7 S: |% x' i2 c5 t } else {
3 T( t! _; V/ l if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {" t, S( Y8 g0 p- X9 Q- v
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);# {7 \0 }- B* F4 J6 F i* d! _. `
} else {
, r" A' p: {, `9 F$ d WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);4 s$ {3 r( }& I' }" @0 s
}# t' A! x. E/ e# [
//create mapping 7 N# ]/ @2 i5 d$ B" \
Status = WinNtBlockIoCreateMapping (0 K Q9 ?% ~0 @% U5 j2 ~
WinNtIo,
+ P( F4 E7 m* k6 c F: x Handle,
7 N" J7 }' U6 @ Buffer,) }8 O) H; d$ Q
WriteProtected,
* [* Z! q3 u! K$ v RemovableMedia,: Z4 I5 v- d( N/ U( m) g
NumberOfBlocks,+ w, I& J. {) }- I) o
BlockSize,. C+ }4 n) t& k" q
DiskType# a S! n" p0 | I0 a1 V- W- w4 ^, P
);
5 V/ Y6 K5 k. _4 N" {//register read or write blocks function
" \- G* w9 g0 y6 z9 q4 S4 v1 Y5 eBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
; |* X6 [( }' b8 L. Y' Z+ ~BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
0 b9 G V3 n8 `. {' p4 P9 [
# u/ A+ m/ k, C% D% t3 z6 m7 n0 U& H//in the WinNtBlockIoReadBlocks,read file API: a; ?0 J8 r* R* d' i6 |% |
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);. u1 W+ Q& K. T0 y$ ?/ W
$ v# {$ U, a7 y# I& Z
问题如下:! r0 ^7 b1 m( z5 ~; S$ O: b, w' ?
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊2 _5 ?7 b9 Y1 S* P2 a/ E
$ s. T. @7 y4 {+ X0 @
[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|