|
|
在EDK source中提供了对physical 和vitural disk的operation
: ?% N- l$ G" c! m E参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件 q: U, T0 t$ w9 l+ p1 V& g0 Y
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
, ^% y! t# {, o) A1 A" S& ~当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:- B \5 k* ]5 I& B
// set disk type,Physical or Virtual disk? and get the name3 d# A( F- a4 ]# @
if (DiskType == EfiWinNtVirtualDisks) {( k1 ~ m' y" ^" a; k; \1 Q. @* m/ i
WinNtIo->WinNtThunk->SPrintf (9 i$ I' c% O6 H
Buffer,% }, X. @0 {" c/ _5 m
L"Diskfile%d",# p+ H% X9 c! i" a' r
WinNtIo->InstanceNumber9 Q4 |, l2 e. e' V) z0 e
);
3 Z7 d" [/ r3 W* m; S$ l } else {4 U, q5 b% L* I% z4 k
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
* R! @# m! h* X) F% t WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
/ o6 N. r0 R; a& Y' U1 f V" g6 u } else {
- F' [; [8 b. }3 H9 @ Z5 \2 P* D# f WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
# v3 _5 z0 v7 Y }% U+ P: O) F6 ]# t& ^
//create mapping ( V4 F/ ~2 u( H- O' ?0 R l9 B
Status = WinNtBlockIoCreateMapping (
! G0 o2 A/ A: c2 ]/ _ WinNtIo,
/ F# o* ^' x$ @# m Handle,4 F0 J2 n- G: p) Z
Buffer,
" j; b" r7 F* J6 D- n WriteProtected,4 B' t9 ]6 r7 y& ~' }0 V
RemovableMedia,
: m, p+ d7 P* c: E NumberOfBlocks,* Q- s* P6 d( p2 c1 b6 l% v6 P3 ]' X5 q
BlockSize,
8 ^2 q; c4 I! k6 p7 N& M DiskType
( S! F# t+ C8 f );7 O& t* \4 o5 c) [- [
//register read or write blocks function) T7 r4 S4 }' j8 ]
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
3 F# M+ R* b- [3 j- c2 c( J$ @0 s* eBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
# E/ a; }1 M5 h* R8 X4 ]# i. k$ H
8 Y; F0 e" R5 ~//in the WinNtBlockIoReadBlocks,read file API
3 {# a' z2 n9 J mFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);5 l. F: u6 P+ p* B) v
$ a- L( a9 A3 i! M: |5 ^4 L: u
问题如下:
! H" C: }( F) U* H% o0 vEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊: L5 y/ u& u4 s: V |" C$ L
, Q2 `6 w4 e# f2 B0 k4 r( C[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|