镜像驱动程序

概述

从 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 edition (版本 7600) 包含一个包含在三个目录中的组件源文件的示例镜像驱动程序。

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

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

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

注意

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

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

镜像驱动程序代码示例说明了如何实现镜像驱动程序。 有关有助于了解示例的详细信息,请执行以下操作:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意

当在客户端上呈现时,镜像驱动程序无需像素精确的准确性,因此可能很难。 例如,不需要接收镜像映像的适配器/监视器来呈现 网格交集量化 (GIQ) 直线绘图和多边形填充与正在镜像的适配器/监视器的精度相同。