Sunwayking

导航

翻译一篇MSDN中关于mirror driver的介绍

原文出自MSDN,连接如下: http://msdn.microsoft.com/en-us/library/dd163215.aspx

本人才疏学浅,翻译中难免出现纰漏,恳请大家指正.希望本文对mirror driver初学者有一定帮助.

翻译中有一些拿捏不准的地方给出了英文原文以供参考.谢谢~!

翻译: sunwayking

镜像驱动(Mirror driver)

描述

本镜像驱动实例演示的是一个视频驱动镜像.

操作原理

当视频镜像运行时,每当系统在主视频设备绘图时,若当前绘图区域位于镜像区域内,则此绘图操作会同时作用在镜像视频设备.有了这种镜像方案,您可以同时在多个视频设备上进行相同的绘制操作.由于驱动讲内存动态分配给各个设备,你的系统所能支持的最大显示设备数将取决与当前系统可用内存的大小.

这个实例被设计用来提供一个基本的具有一般性的镜像方式.本实例不考虑当此支持被添加进系统前所使用的少数特殊解决方案的需求(This eliminates the need for special case-by-case solutions that were used before this support was added to the system).这个实例可以运行在Windows ME和Windows 2k及以上版本的操作系统上.实例中带有详细的代码注释用以解释代码的工作原理,使您能更加容易地对代码进行修改和扩充.请注意,此实例作为视频镜像驱动实例的第一个版本,额外的功能可能会在今后的版本中进行添加.

本实例由一下几个部分组成:

显示驱动程序,如, CD C:\WINDDK\<build number>\src\video\displays\mirror\disp. WINDDK目录和版本号可能会有所不同.

视频微型端口驱动程序,如, CD C:\WINDDK\<build number>\src\video\displays\mirror\mini. 这里指出的微型端口驱动程序只是一个梗概,它只是简单的为所有微型端口驱动的调用返回”成功状态”,由此操作系统似的这些微型端口驱动调用认为存在一个被镜像驱动控制的虚拟硬件设备( The miniport driver that is in this location is a skeleton. The miniport driver simply returns success status for all miniport driver calls that the operating system makes as there is no real hardware that is controlled by the mirror sample).

基于驱动的用户态服务程序,如, CD C:\WINDDK\<build number>\src\video\displays\mirror\app.

执行与设计

接下来的几个小节描述了本实例的执行信息:

镜像显示驱动的基本组成

一个镜像显示驱动必须执行至少如下所示的几个函数:

DrvEnableDriver [导出函数(exported)]

DrvEnablePDEV

DrvCompletePDEV

DrvDisablePDEV

DrvEnableSurface

DrvDisableSurface

DrvBitBlt

DrvCopyBits

DrvCreateDeviceBitmap

DrvDeleteDeviceBitmap

DrvTextOut

DrvCreateDeviceBitmap

DrvDeleteDeviceBitmap

DrvTextOut

镜像微型端口驱动的基本组成

一个镜像微型端口驱动必须执行至少如下几个函数:

  • DriverEntry [导出函数(exported)]
  • HwVidFindAdapter
  • HwVidInitialize
  • HwVidStartIO

事实上由于没有真正的物理显示设备,而是用一个镜像界面接口与之相联,这些微型端口驱动函数需要返回一个”真”结果(positive results).

生成实例程序(略)

概述(略)

最终用户手册(略)

测试

以下列出的是一些当您在镜像设备上运行镜像驱动时所能做的一般性任务:

改变镜像设备设置

为了改变镜像设备设置信息,您必须了解’\\.\DISPLAY#’格式的名称,这个名称是与您的镜像显示设备直接关联的.在具有多显示适配器实例的情况下,’#’表现为不同数字.这些名称可以通过使用EnumDisplayDevices函数对可用显示设备进行枚举来得到.要获取关于EnumDisplayDevices函数的更多信息,请参见Miscrosoft Windows SDK 文档.只用作参考和测试的这些名称可以在下方所示的注册表键下找到:

HKLM\HARDWARE\DeviceMap\Video

把镜像设备添加到桌面设备指针列表(the desktop pdev list)

通过在注册表中添加本键值’Attach.ToDesktop = 0x1’以把镜像设备添加到桌面设备指针列表中.在调用ChangeDisplaySettings函数后系统会自动加载并使用镜像显示驱动.要获取关于ChangeDisplaySettings函数的更多信息, 请参见Miscrosoft Windows SDK 文档.

HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\

Services\mirror [‘mirror’是镜像界面接口的简称(where 'mirror' is short name of mirrored surface)]

Device#\Attach.ToDesktop 0x1 (DWORD)

在桌面设备列表(the desktop pdev list)中卸载镜像设备

通过在设置’Attach.ToDesktop’为’0x0’以从桌面设备列表中卸载镜像设备.如果您不从桌面设备列表中卸载镜像设备,您的驱动将会在下次系统启动时被自动引用.调用ChangeDisplaySettings并设置参数dwFlags为CDS_UPDATEREGISTRY可以保存该键下的其他Default.Settings值.

创建一个DC对象或者设备管理(device-managed)的位图

为了使用镜像界面接口创建DC或者设备管理的位图等对象,可以使用普通的GDI函数.调用CreateDC函数来创建DC,具体请参见下方例程. 要获取关于CreateDC函数的更多信息, 请参见Miscrosoft Windows SDK 文档.

HDC hdc = CreateDC("DISPLAY", // 驱动名称

                                deviceName, // 本实例的设备名称

                                NULL,

                                NULL);

代码预览(略)

文件一览(略)

posted on 2009-04-25 22:10  Sunwayking  阅读(6560)  评论(0编辑  收藏  举报