迁移到 WDDM
注意
XDDM 和 VGA 驱动程序在 Windows 8 及更高版本的操作系统上无法编译。 如果显示硬件连接到没有经过认证支持 WDDM 1.2 或更高版本的驱动程序的 Windows 8 计算机,则系统默认运行基本显示驱动程序。
新驱动程序应编写为 WDDM 驱动程序。
若要迁移到 Windows 显示驱动程序模型 (WDDM),驱动程序开发人员需要编写完全不同的显示和视频微型端口驱动程序。 与 Windows 2000 显示驱动程序模型 (XDDM) 类似,WDDM 需要配对的显示驱动程序和显示微型端口驱动程序。 但是,在 WDDM 中:
显示驱动程序在用户模式下运行,因此称为用户模式显示驱动程序 (UMD)。
视频微型端口驱动程序称为内核模式显示微型端口驱动程序 (KMD)。
该模型不使用 Windows 图形设备接口 (GDI) 引擎的服务。 而是使用 Direct3D 运行时和 DirectX 图形内核子系统 (Dxgkrnl.sys) 的服务。
尽管驱动程序编写器可以在 WDDM 驱动程序中重复使用低级硬件依赖代码,但它们应重写与新设备驱动程序接口 (DDI) 相关的代码。 编写 WDDM 驱动程序时,请考虑以下几点:
KMD 必须实现一组修订的入口点函数,以便与操作系统和 DirectX 图形内核子系统 (Dxgkrnl.sys) 进行交互。 有关详细信息,请参阅显示微型端口驱动程序的 DriverEntry。 KMD 可以调用任何记录在案的内核模式函数。
KMD 动态加载相应的 Dxgkrnl.sys。 KMD 和 Dxgkrnl 通过接口相互调用。
不再需要 KMD 来处理大多数视频 I/O 控制代码 (IOCTL)。 在 XDDM 中,内核模式显示驱动程序使用这些代码与视频微型端口驱动程序通信。 在 WDDM 中,UMD 与 Direct3D 运行时通信。 然后,Dxgkrnl 与 KMD 通信。
WDDM 仍使用以下 IOCTL,KMD 必须处理它们:
UMD 必须实现并导出 OpenAdapter 函数,该函数将打开图形适配器的实例。 UMD 还必须实现 CreateDevice 函数,该函数创建处理呈现状态集合的显示设备的表示形式。
UMD 的 CreateResource 函数以及 KMD 的 DxgkDdiCreateAllocation 函数取代了 XDDM 中的 DdCanCreateSurface、DdCreateSurface 和 D3dCreateSurfaceEx 函数。
其余的大多数 UMD 函数实现了与内核模式 XDDM 显示驱动程序在以下函数中实现的功能相同的功能:
- D3dDrawPrimitives2 函数和 DP2 操作代码
- 运动补偿回调函数和 DirectX 视频加速结构