|
|
在EDK source中提供了对physical 和vitural disk的operation
1 K' x" Z+ o; Y9 ]! v参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件" o. n# p8 A2 o- S% X9 e
set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
! M# k7 X x; `/ {& h$ j4 p当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
# y7 r! D! k+ e0 [// set disk type,Physical or Virtual disk? and get the name
' a2 n0 ~6 L" u0 G9 Xif (DiskType == EfiWinNtVirtualDisks) { o8 Q' r' c- M1 ?
WinNtIo->WinNtThunk->SPrintf (5 ]1 v" ~* G" L0 T4 Y2 [! O3 {
Buffer,
+ Y$ ^/ [% A# b1 r- b L"Diskfile%d",
; I& X2 @7 b9 z& o' g) l WinNtIo->InstanceNumber
% t) |- V+ o3 g% L7 |" b: J) L );) i2 @4 I3 _, M$ g$ c" u
} else {1 {0 ?$ [( N8 j4 j
if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
% W. g* T. ^! V$ B, A WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);! k. L: H6 y. C5 `* h
} else {
Y9 S$ P8 j, E5 O WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);- N) |/ S2 U7 N8 E/ L4 A
}: d- K2 k1 U% z8 C; O
//create mapping 1 X* t/ O7 l6 x; n! b# \
Status = WinNtBlockIoCreateMapping (
2 M9 E/ T, S6 E WinNtIo,
% n) \ R0 w/ q6 ?% E Handle,
, m5 d/ F; C0 M2 b3 c8 \8 g: ~& K! ] Buffer,
6 u. S* k; X, g: \ WriteProtected,8 d, s* w/ F& F0 R7 o8 [
RemovableMedia,# B- j6 d% j* O* T
NumberOfBlocks,7 q2 |) t. A/ F) G8 q- x0 {, @
BlockSize,
7 l1 k) [# r# n i* l0 x DiskType1 e$ u8 m+ @7 [6 q- q- W7 s
);
' ~0 P, Q2 d3 x, t0 R//register read or write blocks function7 N/ n) C7 h4 P* D8 k
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;( ~: Q, O/ r2 O6 p/ n
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;, [) O0 ]9 J+ b3 R* c
* q' S& j8 I/ A1 a% a- L/ o//in the WinNtBlockIoReadBlocks,read file API
9 V: _* g% X6 G. |% r! x: cFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);& \( f I$ Y4 {
8 [1 V1 I* j2 M) o) j4 L问题如下:8 n2 Q5 H. x" Z! m
EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊1 y6 a6 C: l( W) r3 ^" b1 B, n
) J& n. ?+ S3 q4 j9 o) `& g[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ] |
|