镜像驱动程序

概述

从 Windows 8 开始,镜像驱动程序将不会安装在系统上。 本部分所述的镜像驱动程序仅在早期版本的 Windows 上安装和运行。

但是,从Windows 8开始,向想要在辅助技术中为残障或残障客户提供镜像驱动程序功能的开发人员,可以使用特殊的 GDI 辅助功能驱动程序模型。 若要了解有关此特殊驱动程序模型的详细信息,请联系 acc_driver@microsoft.com

基于 镜像 驱动程序体系结构的远程显示驱动程序模型也可以从 Windows 8 开始运行,但在 Windows 10 版本 2004 中已删除。 有关详细信息,请参阅 远程显示驱动程序

注意

从Windows 10起,不再建议将 GDI 辅助功能驱动程序用于新产品,Microsoft 将在未来的操作系统版本中删除支持。 Windows 10版本 2004 中已删除对 GDI 远程显示驱动程序的支持。 但是,通过构建自定义远程 协议提供程序间接显示驱动程序,仍可以创建远程显示解决方案。

镜像驱动程序说明

镜像驱动程序是虚拟设备的显示驱动程序,它镜像一个或多个其他物理显示设备的绘图操作。 它是实现的,其行为非常类似于任何其他显示驱动程序;但是,与典型的微型端口驱动程序相比,其配对的视频微型端口驱动程序最小。 有关 镜像系统中微型端口驱动程序的详细信息,请参阅视频微型端口驱动程序 (Windows 2000 型号) 中的镜像驱动程序支持。 Windows 驱动程序工具包 (WDK) Windows 7 版本 (版本 7600) 包含一个示例镜像驱动程序,其中包括包含在三个目录中的组件源文件。

目录 包含的源文件
\src\video\displays\镜像\disp 镜像驱动程序。
\src\video\miniport\镜像\mini 微型端口驱动程序。
\src\video\displays\镜像\app 用户模式服务。 还包含 镜像.inf。

GDI 支持虚拟桌面,并提供在镜像设备上复制部分虚拟桌面的功能。 GDI 将虚拟桌面实现为物理显示驱动程序层上方的图形层。 所有绘图操作都从此虚拟桌面空间开始;GDI 剪辑并呈现在虚拟桌面中存在的相应物理显示设备上。

镜像设备可以在虚拟桌面中指定任意剪辑区域,包括跨多个物理显示设备的剪辑区域。 然后,GDI 向镜像设备发送与该驱动程序的剪辑区域相交的所有绘图操作。 镜像设备可以设置与特定物理设备完全匹配的剪辑区域;因此,它可以有效地镜像该设备。

注意

在 Windows 2000 及更高版本中,镜像驱动程序的剪辑区域必须包含主显示设备。

在 Windows Vista 及更高版本中,桌面 Windows 管理器 (DWM) 将在加载镜像驱动程序时关闭。

镜像驱动程序代码示例演示如何实现镜像驱动程序。 有关可帮助你了解示例的详细信息,请参阅:

  • 使用示例 INF 文件镜像.inf 作为模板。 有关详细信息 ,请参阅镜像驱动程序 INF 文件
  • 请参阅 mirror.exe 应用程序,该应用程序演示了如何将 镜像 驱动程序附加到虚拟桌面。 有关详细信息 ,请参阅镜像驱动程序安装
  • 有关使用 Win32 EnumDisplayDevices 函数的信息,请参阅 Windows SDK 文档。 使用此函数来确定与镜像显示设备关联的 \\.\Display# 名称。 更改镜像设备的设置需要此编号。 对于多个实例, # 是每个实例的不同数字;因此必须通过循环访问可用的显示设备来确定此数字。

将镜像设备附加到全局桌面

  1. 将REG_DWORD注册表项 Attach.ToDesktop 添加到驱动程序的服务项。

  2. 将此键的条目设置为 1 (一个) 。

若要禁用镜像驱动程序,请将此项设置为 0 (零) 。

如前所述,驱动程序在位于设备层上方的绘图层中安装并运行。 由于镜像驱动程序的坐标空间是桌面坐标空间,因此它可以跨多个设备。 如果镜像驱动程序旨在镜像主显示器,则其显示坐标应与主显示器的桌面坐标一致。

  • 安装 镜像 驱动程序后,将为与驱动程序的显示区域相交的所有呈现操作调用该驱动程序。 在多监视器系统上,如果镜像驱动程序仅与主显示设备重叠,这可能不包括所有绘图操作。

  • 建议使用用户模式服务来维护镜像驱动程序的设置。 此应用程序可确保驱动程序在启动时正确加载,并且可以通过WM_DISPLAYCHANGE消息获取显示更改通知,从而对桌面的更改做出适当的响应。

  • GDI 为与驱动程序边界矩形相交的任何 2D 图形 DDI 绘制操作调用镜像驱动程序。 请注意,如果图面是设备格式位图,则 GDI 不会检查执行边框;也就是说,如果 SURFOBJiType 为 STYPE_DEVBITMAP。

  • 与往常一样,必须在不使用全局变量的情况下实现镜像驱动程序。 该特定驱动程序的所有状态都必须存在于 PDEV 中。 GDI 将为视频微型端口驱动程序创建的每个硬件设备扩展调用 DrvEnablePDEV

  • 镜像驱动程序不应支持 DirectDraw。

  • 镜像驱动程序必须在 DEVINFO 结构的 flGraphicsCaps 成员中将GCAPS_LAYERED标志设置为 TRUE

  • 辅助功能镜像驱动程序必须在 DEVINFO 结构的 flGraphicsCaps2 成员中将GCAPS2_EXCLUDELAYERED和GCAPS2_INCLUDEAPIBITMAPS标志设置为 TRUE

  • 镜像驱动程序可以选择通过实现 DrvRealizeBrush 来支持画笔实现。

GDI 允许同一驱动程序在单监视器和多监视器系统上运行。 多监视器系统中的驱动程序只需跟踪其在全局桌面中的位置。 每当发生 Win32 ChangeDisplaySettings 调用时,例如当用户使用 控制面板 中的显示程序动态更改监视器在桌面中的位置时,GDI 会向驱动程序提供此位置。 发生此类更改时,GDI 相应地更新 DEVMODEW 结构的 dmPosition 成员。 驱动程序可以通过实现 DrvNotify 来接收此类更改的通知。 有关详细信息 ,请参阅镜像驱动程序安装

注意

当在客户端上以这种准确度呈现时,镜像驱动程序不需要以像素完美的精度进行渲染。 例如,接收镜像图像的适配器/监视器不需要呈现 网格相交量化 (GIQ) 线条绘制和多边形填充,其精度与镜像适配器/监视器相同。