找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 8621|回复: 1

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation
/ D/ Z4 j: F( M# D参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
) O+ d' d6 i, y+ a- _4 |4 uset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512- c6 i1 N4 J6 i1 o7 a- R
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:2 L) o1 I/ k* _
// set disk type,Physical or Virtual disk? and get the name. w7 h" F' K8 M4 a0 l
if (DiskType == EfiWinNtVirtualDisks) {! i2 L6 k% y; P" i) b- m
    WinNtIo->WinNtThunk->SPrintf (; |" ^( z2 L' }! g) V, r/ H
                          Buffer,
2 f9 N( Q3 ]" O/ [. O+ S7 [; h4 z                          L"Diskfile%d",$ A7 y' m  O- C; T; o: k
                          WinNtIo->InstanceNumber
- b% j% x+ J5 ]  [                          );* r; Y) q% e8 |, K" _7 ~
  } else {
% @( l7 D* z5 D    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {5 n1 `+ \! N& C
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);  x5 P/ a- X8 K, |# f% ?; r# h. r
    } else {
, g  n$ |5 C0 M) G3 ~- L  h! T      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);/ h0 k9 A8 }! t9 Z/ L& I: \; u' m
    }
5 S' L. J  K6 i9 u8 R3 g- C; ?" r//create mapping : v9 ]' S/ v$ ?' w
Status = WinNtBlockIoCreateMapping (5 @& m6 C! ~' `. E9 F
                    WinNtIo,* z, |+ X! Q/ _1 z
                    Handle,
- k) v7 V5 u! F7 y                    Buffer,
0 R2 Y# d5 ^8 X# W+ [' J- l; ~1 C                    WriteProtected,
0 K& f: d) d. e$ v: T  w9 U                    RemovableMedia,
9 x" s4 B: Q( r" F                    NumberOfBlocks,
( F8 x( O( k. ^% _' X9 l" M* |                    BlockSize,
; m- n; P4 u1 N8 s* W                    DiskType
0 [0 q0 X0 j2 R' u                    );5 p. f/ D) E3 @+ K% P5 ~, B
//register read or write blocks function
4 Y. U' t( W* d1 k5 L: U' VBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
7 F( Y+ N: x% S0 i' hBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
" |( C! L/ a' t- B
' v4 Q, E' z% B* E$ F. X: M//in the WinNtBlockIoReadBlocks,read file API5 W- r. \: B) ^' q  F$ t
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
7 Y! O4 f) y) y/ F/ Q( I/ I( k9 p( |! i; E5 T2 Z( C/ d
问题如下:
! Q/ y- b. z; i) wEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊/ s# _1 P  m3 t8 _9 r

5 e6 V+ _- |4 Y0 \+ L- K[ 本帖最后由 libeili 于 2009-3-23 18:01 编辑 ]
发表于 2009-3-24 16:52:44 | 显示全部楼层
没有物理disk controller handle,Win NT bus driver为所有virtual NT thunk device创建device handle.
( w) O0 w8 t0 t5 K9 r3 {3 \
. i+ B1 Y  K1 _3 Z参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-2-21 11:29 , Processed in 0.079485 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表