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

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation7 [$ s; ]( I! w% w' G; `
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
& w2 ?; A- W: |set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512( L- @1 [5 h& _
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:. b0 @& ]! }# O1 T
// set disk type,Physical or Virtual disk? and get the name
$ w5 A9 h' X  f7 t: Mif (DiskType == EfiWinNtVirtualDisks) {
+ n9 m! @+ A; U    WinNtIo->WinNtThunk->SPrintf (: L9 Z( N- M1 D0 g
                          Buffer,
$ E8 j8 ?8 L& i; V9 D                          L"Diskfile%d",' T" k* C' I8 l1 `
                          WinNtIo->InstanceNumber
4 n3 i$ h# [; A5 O  ~! J9 ]                          );
6 C% W8 D+ l, P  } else {7 o& F* j5 W- ~9 d
    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
( Y: X8 y8 d4 D! Z      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);
" C& g+ X$ S! R/ k5 d    } else {$ B# @& a* s" w( B' E: g4 b0 o$ g4 S$ B9 H
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);. v/ z' P* y: i  I; w
    }0 }% i2 b# x1 a
//create mapping 2 Z" N4 G) P. W* G
Status = WinNtBlockIoCreateMapping (, k4 \1 J/ k) E
                    WinNtIo,
' l% c! [& [: v2 x$ k                    Handle,; d. s. _; x4 x& r' T7 h
                    Buffer,
5 H4 E' D+ L' ^& a2 e                    WriteProtected,
, u( g5 [  h2 V& u                    RemovableMedia,
$ Y$ N7 K2 ?6 ]+ E+ j# t6 k+ A                    NumberOfBlocks,0 }- r7 F* F/ `, A) D
                    BlockSize,
: k8 k4 G$ d# s5 ~5 ]                    DiskType
2 @* |5 e9 c$ _" D5 _                    );! \# P5 \" t: K# _+ \9 U
//register read or write blocks function# j% v5 r- c) @* T1 @  Q& y
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;
, e# v) z4 e+ O8 h8 U; i1 t% ABlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;
$ B) g/ A' u5 L! j2 A$ h/ e  m, k3 H6 j& S3 `; p: S5 M+ s
//in the WinNtBlockIoReadBlocks,read file API
' }3 t: y/ `; I/ VFlag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);: w% l7 W( v, }: J$ \2 c0 U
0 R/ k7 H5 ~* n% s
问题如下:
2 d2 `$ i7 s3 p# _EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
( [7 w- Y4 L7 k& J
* w: D$ g* J" ]3 ^9 F( }[ 本帖最后由 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.$ ?  J8 g& l1 V7 p2 T

3 y# k% {% ^1 m# A# F参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 00:18 , Processed in 0.108071 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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