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

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation
; [$ l# h  a- O6 P参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
2 d- ^* F9 u# j- X2 [set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512
' T0 U* J0 H9 [0 {8 t当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:0 T2 o: A0 |8 @- x) H! J% ^& N
// set disk type,Physical or Virtual disk? and get the name1 J. X, u5 a. K& }6 V
if (DiskType == EfiWinNtVirtualDisks) {
! f! Z7 h$ |2 m: V. d' y  e    WinNtIo->WinNtThunk->SPrintf (- `/ T  B( G0 h2 t( |
                          Buffer,
8 t) v3 j/ g4 n2 x2 {0 z                          L"Diskfile%d",
# r$ T7 f2 A0 \' y1 G2 G  ~                          WinNtIo->InstanceNumber
. k, z  d3 r5 P8 x4 f* j                          );5 f6 a2 B; P" V
  } else {+ |' c; ~7 @( ~; [5 \  z1 L
    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
+ Z9 T, @' D. {6 c0 ^6 b      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
/ L  b. f: H6 k& C9 ~    } else {( m- y9 ~6 m. `0 E: y
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);/ p, [2 C5 M5 n5 h: I2 W4 W- J
    }7 Y( [6 c! c- {6 \! L  x
//create mapping
- J0 S4 s7 Y& M( n9 k) i+ M Status = WinNtBlockIoCreateMapping (
" j3 H6 l3 |8 j$ M8 C2 i                    WinNtIo,
8 u: z" ?. ?2 j' W& B1 c                    Handle,
5 f, C. V9 s& Q                    Buffer,# [( K3 D) {/ J/ S0 `
                    WriteProtected,
' e9 R$ D* K' y! U0 I                    RemovableMedia,2 ]4 }% R* w0 q& }8 ^
                    NumberOfBlocks,
  g) s# M8 g9 {8 x) k  D" O. F  N: F                    BlockSize,
% e1 q! N, s, b                    DiskType: S" d- k( {2 c! [' v. Y: L
                    );( p& o% F# q8 Q4 K* g
//register read or write blocks function
. h( I8 R& h, n. e& E" _( mBlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
0 x0 ^" r( ?# w4 Z3 d9 zBlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
. W' j. f7 g$ J4 e& V/ K' ]& T' W: j+ n! I
//in the WinNtBlockIoReadBlocks,read file API8 `- M1 n! h- l# A! H$ H
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
' s9 R. k5 J+ e0 ?+ J+ @" S
" ^* I. z6 n3 H1 C问题如下:
# ~- g" M. V) `1 @EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
2 b/ r( C& r1 |- f: b$ H3 Y
2 u$ ^# w. r! w4 _$ ]- V[ 本帖最后由 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.9 U' q+ ^( Y4 J+ S

2 \) b4 f; o! X参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-8 08:14 , Processed in 0.038651 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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