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

physical disk operation in EDK NT32 platform

[复制链接]
发表于 2009-3-23 18:00:26 | 显示全部楼层 |阅读模式
在EDK source中提供了对physical 和vitural disk的operation
; ^" h3 M! ^- |2 ?6 W参数设置:EDK_SOURCE\sample\platform\NT32\build中的system.cmd文件
8 Y: k1 x. Z+ p& ~9 W5 {set EFI_WIN_NT_PHYSICAL_DISKS=a:RW;2880;512!//设置一个软盘,大小为1.44M,block size=512: t& i) t9 e9 ^6 G5 V6 v
当我们在跑EDK的时候,可以去访问该软盘。其实在EDK中去追踪该代码的时候,会发现,其实质上是在WinNtBlockIoDriver中调用WIN api进行读写,源代码如下:
1 K3 k* a2 s# w// set disk type,Physical or Virtual disk? and get the name
$ n- `! ]& b: W  Fif (DiskType == EfiWinNtVirtualDisks) {, N4 ]2 D9 N) X$ J; \. z# l
    WinNtIo->WinNtThunk->SPrintf (, y4 B. M) ?2 |
                          Buffer,6 s5 }  M2 U) ]( H
                          L"Diskfile%d",
0 U( Q* A8 F: p                          WinNtIo->InstanceNumber
4 b& z8 M( W: i* e, V$ M                          );5 Z5 O- w9 K* b8 E- M! M6 C# Q; F( y
  } else {
0 B$ }* E- G+ M7 p$ r: V    if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {+ b, H7 c- y9 D' m- f
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);# m# `! r3 H/ V' l& Z8 b
    } else {; ]' @5 ~  n0 a, ?
      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);
% ?' j2 y9 p/ H4 O& n* J# X    }) ?' O. F- ?* t+ p; z* v
//create mapping 4 Y6 q: }1 I* \1 ?. j
Status = WinNtBlockIoCreateMapping (
7 p% c- L+ D  q3 C; H$ @( F                    WinNtIo,
; E1 B) d% F0 p                    Handle,
. R( E( H' e9 [                    Buffer,
* w# N' N7 n9 |, N                    WriteProtected,( s8 y0 C( z$ o& I3 _
                    RemovableMedia,
8 u  d9 E. Q( Y                    NumberOfBlocks,9 [( v- C, N6 L: I/ N% A( C
                    BlockSize,1 _% d; Y9 @  p3 n+ M. {9 ?
                    DiskType
9 p0 T# ^0 w/ J! D4 U                    );' F2 ^5 O' W1 i9 }7 y/ [
//register read or write blocks function1 B0 d+ }+ Q) u3 Q1 ?+ J6 F
BlockIo->ReadBlocks = WinNtBlockIoReadBlocks;9 A! H' t) m5 B2 C
BlockIo->WriteBlocks = WinNtBlockIoWriteBlocks;% G5 W* p/ H: V, K
; f$ h. N& |# {; B
//in the WinNtBlockIoReadBlocks,read file API, D2 g- b+ O- f* P& l" l
Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);
' H, i" I; R! a3 \3 |4 G  s0 R6 ]  V8 b5 R2 N7 K
问题如下:
0 r3 e3 H  h1 dEDK 的NT32下应该是不能对物理设备进行访问的,但是现在却可以访问一个物理disk,试问当connect controller to driver的时候,物理disk controller handle是怎么得到?希望高手解释一下啊
5 T+ G+ V4 y: e& N+ \
+ z. f9 u  T. }7 S$ b% N1 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.* |- ?" }/ O: [  O1 u

# _" i: j8 Z* J6 Q+ X3 b参见 WinNtBusDriverBindingStart()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-11 18:01 , Processed in 0.203985 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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