|
|
在EDK source中提供了对physical 和vitural disk的operation
; ^" h3 M! ^- |2 ?6 W参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
8 Y: k1 x. Z+ p& ~9 W5 {set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512: t& i) t9 e9 ^6 G5 V6 v
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
1 K3 k* a2 s# w// set disk type,Physical or Virtual disk? and get the name
$ n- `! ]& b: W Fif (DiskType == EfiWinNtVirtualDisks) {, N4 ]2 D9 N) X$ J; \. z# l
WinNtIo->WinNtThunk->SPrintf (, y4 B. M) ?2 |
Buffer,6 s5 } M2 U) ]( H
L"Diskfile%d",
0 U( Q* A8 F: p WinNtIo->InstanceNumber
4 b& z8 M( W: i* e, V$ M );5 Z5 O- w9 K* b8 E- M! M6 C# Q; F( y
} else {
0 B$ }* E- G+ M7 p$ r: V if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {+ b, H7 c- y9 D' m- f
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);# m# `! r3 H/ V' l& Z8 b
} else {; ]' @5 ~ n0 a, ?
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
% ?' j2 y9 p/ H4 O& n* J# X }) ?' O. F- ?* t+ p; z* v
//create mapping 4 Y6 q: }1 I* \1 ?. j
Status = WinNtBlockIoCreateMapping (
7 p% c- L+ D q3 C; H$ @( F WinNtIo,
; E1 B) d% F0 p Handle,
. R( E( H' e9 [ Buffer,
* w# N' N7 n9 |, N WriteProtected,( s8 y0 C( z$ o& I3 _
RemovableMedia,
8 u d9 E. Q( Y NumberOfBlocks,9 [( v- C, N6 L: I/ N% A( C
BlockSize,1 _% d; Y9 @ p3 n+ M. {9 ?
DiskType
9 p0 T# ^0 w/ J! D4 U );' F2 ^5 O' W1 i9 }7 y/ [
//register read or write blocks function1 B0 d+ }+ Q) u3 Q1 ?+ J6 F
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;9 A! H' t) m5 B2 C
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;% G5 W* p/ H: V, K
; f$ h. N& |# {; B
//in the WinNtBlockIoReadBlocks,read file API, D2 g- b+ O- f* P& l" l
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
' H, i" I; R! a3 \3 |4 G s0 R6 ] V8 b5 R2 N7 K
问题如下:
0 r3 e3 H h1 dEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
5 T+ G+ V4 y: e& N+ \
+ z. f9 u T. }7 S$ b% N1 k[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|