|
|
在EDK source中提供了对physical 和vitural disk的operation! h' m+ Q# d/ H0 F: f* s n
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
- \; H/ z) b2 M1 R% T4 V, r, s, Oset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
$ Y! p3 p5 W4 U v: \# c' b当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
0 b* r7 ]0 z. Y2 n8 y// set disk type,Physical or Virtual disk? and get the name
. [7 n( T5 m4 f6 O; sif (DiskType == EfiWinNtVirtualDisks) {1 F4 U1 Y7 ?9 }- Q
WinNtIo->WinNtThunk->SPrintf (
4 h4 y) F" C% v Buffer,
- V4 z5 `9 R+ c8 p5 Q4 d L"Diskfile%d",
$ U2 ^7 ~. ]0 }4 x, a) o WinNtIo->InstanceNumber
4 m$ ?* C B- o7 X# Q5 U3 d9 I );# ]& m2 ]5 l, W0 X
} else {2 I8 r0 B- n9 d- R
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
$ Q% Z+ Z! e ^3 S9 e4 H WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);( ?3 W: |% v. x( @* E c/ L" `
} else {- W) R" Y6 I7 K9 h% X( p
WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
# Q+ {; V, N# w }* X. f0 m* q9 X. O0 M
//create mapping
: ]. O6 J4 Z$ T0 ]9 o+ \ Status = WinNtBlockIoCreateMapping (1 ?$ f! o% C) j; }; Z% E% U- _
WinNtIo,
* V4 L0 _2 J; V Handle,8 i' E' P3 N, _( ~8 Y. g; v3 q
Buffer,4 D4 `, I: b: \' u& t2 b5 T
WriteProtected,7 g7 m( Z, {# h4 z$ |, g
RemovableMedia,
) @) `! m. `# Q3 C+ C NumberOfBlocks,
! J8 a3 F) p* @ ~ BlockSize,
( T/ B5 r: |- X* r DiskType
& f4 G; X2 G6 ]- Z- A );
- k; e- `8 Q; n& d6 C; d//register read or write blocks function
$ ]/ F. H F+ ?/ |, xBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;( i: V7 W1 h, U, r
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;5 y- c, v6 s" W r; f
/ k+ j# Z8 B* L+ p9 t
//in the WinNtBlockIoReadBlocks,read file API8 k; H6 g4 m. v6 F, r
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);4 W) g( M( v+ H1 v7 k7 u
6 |7 W" W0 k- n- C
问题如下:
, r& e1 E$ d# S/ {- b& wEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
. B# n0 y; h2 H$ k% o
2 }& l& Y4 f& [. a) z[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|