|
在EDK source中提供了对physical 和vitural disk的operation
) x: b8 L# K( L+ G: Q6 L. T参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件: Z5 _4 A2 ]: z) T4 z7 C+ P
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=5127 |3 `* K: {2 H& {9 j& |, }5 P) F r
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:) s7 {5 O* I' [$ K8 ~7 {
// set disk type,Physical or Virtual disk? and get the name( s7 d1 c; s. O" y% U
if (DiskType == EfiWinNtVirtualDisks) {% I" w0 G7 q6 B: H# i( E0 g9 {
WinNtIo->WinNtThunk->SPrintf (
2 \7 o8 {5 d0 _3 I7 c! v/ O5 s Buffer,; a1 t, }( h# n- V* w
L"Diskfile%d",
. Y6 Y/ \! z" [# ~5 y/ T WinNtIo->InstanceNumber; N$ Q; i% F3 B
);
& d$ T l* D( y0 B( m } else {
0 I |+ i3 J* @2 w6 u- F if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {9 T. B3 ~2 ~$ O% Y3 B6 ]' m7 n
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);6 s- q9 `# |) D6 X4 i
} else {6 ^9 W. U- u% Q) \0 V
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
' O* t' l; g+ ` }# \8 j! o/ ?( t# `
//create mapping
- }5 S) J9 b+ w& V: o( q Status = WinNtBlockIoCreateMapping (
- X) ^ Z- @ B4 D WinNtIo,
4 d, ^ l$ d# o( V8 Q6 d& B Handle,
. n7 {; F: C0 c \4 k2 C Buffer,, U4 B. ]# n5 o6 o3 F4 `9 D
WriteProtected,
' ]+ t R/ S: c% G1 v3 k- s f2 s RemovableMedia,: l) u: a# ^5 k/ V- W
NumberOfBlocks,5 w) |* O$ P0 |
BlockSize,
1 O! [( D1 X0 j DiskType3 Q4 w0 n& j' q' }/ c2 [$ I7 ?) k
);
- w% c. S) {+ \. L6 s) ^# [3 ]( F3 S//register read or write blocks function
' S, [5 |! X+ R: M/ T. lBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
+ l; p4 ?! I/ ?7 g+ Q/ r+ QBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks; m0 I& q6 Z( [
8 a' i$ z0 ~0 ^) `6 s, K% z% P1 k/ L//in the WinNtBlockIoReadBlocks,read file API. U Z# h7 m6 \
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
# h& j; S% E) \2 ^
% \" p0 y! I$ {) s, q7 k- W问题如下:
5 A" U4 q3 U& `6 {% e2 oEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
! w# u; ?. I: w& d# Z# M
7 A* Q) T' a! b, A[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|