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

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation3 |  W0 M/ X' a) v0 U
参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
( T8 f8 o) L* O8 y" cset EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512- l% b" ^" R6 Y' Z7 `0 {
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:' ~! m, r+ {2 H
// set disk type,Physical or Virtual disk? and get the name# W& l' O9 O, X( m; O- t* ?: ]( q9 p
if (DiskType == EfiWinNtVirtualDisks) {
: \2 |# s, V+ y( d, N9 P' z    WinNtIo->WinNtThunk->SPrintf (* `; o( }/ j( ]$ v6 _" _7 O
                          Buffer,
% e+ a  m1 a" l* _! H: @) e                          L"Diskfile%d",
1 |) T. U. @& v                          WinNtIo->InstanceNumber
0 O0 N' x2 r8 k, }* o                          );
  Y. j( ^/ }) I. g( ^  } else {
! i0 a9 b7 S; u& a$ L    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {
: C  |' g0 t$ e6 ~" r, T* }* a$ a      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);2 L* B0 J, m! X
    } else {
" U0 C3 x1 h2 b3 j& U! {3 L      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);1 Y0 Z, Z& n/ h, b: p  o9 \$ [# ?
    }/ E- x4 P4 ], I, d8 D
//create mapping
3 B) k2 K" N1 f; b; W! |' S Status = WinNtBlockIoCreateMapping (" E- s$ z. w/ g( D1 r
                    WinNtIo,3 V$ ?/ J: h+ o# v; D
                    Handle,
1 ^  ?; C$ [: p6 J! T: ]4 f- F                    Buffer,
& A* u) r9 t: |' y                    WriteProtected,# U: C' n2 n! d
                    RemovableMedia,
$ h  l4 J5 k" ]: n4 ~% B. @- h                    NumberOfBlocks,$ _; o, T0 [" c  q2 v( P
                    BlockSize,4 @  m& G8 F" \5 [+ Z
                    DiskType4 O. m5 ~  b8 j, s
                    );6 p0 e) w! D  F7 l6 u! |/ @1 e
//register read or write blocks function4 Q6 M; e  i+ D7 E
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;4 g; `, o9 I- m/ z$ U9 R" L
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;9 T$ p# o0 m# a0 T6 }. ]6 X3 b. p+ z9 p

6 e7 F+ Y0 n. `1 r1 m% D//in the WinNtBlockIoReadBlocks,read file API& l/ n, t( |; X' g
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);" H& q( e8 s& C  h' X
" N! |) H1 X+ i* J% \; m* h
问题如下:
, h5 D; J" g7 Y) i" U" _EDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
+ q6 f: M/ J+ l7 c  v- q* A1 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.: x4 ^( Q3 r0 m! U1 {

8 J$ {! e! M8 n参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 12:25 , Processed in 0.377339 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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