查询 Windows 显示驱动程序模型 (WDDM) 功能的支持和启用。 其中介绍了:
用户模式和内核模式显示驱动程序(UMD 和 KMD)如何查询 OS,以确定 WDDM 功能在系统上是否受支持和已启用。
OS 如何确定驱动程序是否支持特定的 WDDM 功能。
从 Windows 11 版本 24H2 (WDDM 3.2) 开始引入此功能查询机制。
WDDM 功能概述
可以将 WDDM 视为功能集合,其中一项功能是涵盖某些功能的 WDDM API/DDI 的集合。
功能由功能 ID 标识,它由类别 ID 和类别中功能本身的子 ID 组成。
OS 已知的每个功能都有关联的状态信息,用于确定该功能在系统上是否受支持和/或已启用。 某些功能可以是驱动程序功能。 驱动程序功能需要启用驱动程序的某个级别的支持。 Dxgkrnl 提供握手机制来确定功能配置。 注册表项可以基于每个功能、每个适配器覆盖功能配置。
驱动程序功能还可以具有一个功能接口,该接口提供与该功能相关的驱动程序 DDI。 通过支持单个功能接口,我们不再需要依赖更新 OS 和 KMD 之间的主接口,后者以前只能使用更新的 WDDM 版本控制更改进行扩展。 此方法提供了一种更灵活的方式,用于向以前的 OS 或通过 Windows Moment 版本向后移植功能,而无需定义特殊支持。
每个功能都可以包含一个依赖项列表,作为先决条件,这些依赖项也必须受支持。 需要此类依赖项的未来功能将在其文档中指示其所需的依赖项。
功能会进行版本控制,并且每个受支持的版本均可以具有不同的接口或配置。
WDDM 引入了一组 API 来用于查询特定功能状态。 API 包括:
DXGK_FEATURE_INTERFACE:在调用 DxgkDdiStartDevice 后,KMD 可以查询并使用此接口来确定特定功能在系统中是否受支持和已启用。
此机制取代了以下现有 DDI:
DxgkCbIsFeatureEnabled
DxgkCbQueryFeatureSupport
DXGKDDI_FEATURE_INTERFACE:此机制允许 OS 从 KMD 查询功能接口。
DxgkIsFeatureEnabled2此函数是系统提供的 displib 库中的入口点。
KMD 可以从其 DriverEntry 例程调用 DxgkIsFeatureEnabled2,而无需初始化 Dxgkrnl 来确定系统是否启用了特定功能。
D3DKMTIsFeatureEnabled:此用户模式 API 允许用户模式模块确定是否启用了特定功能。
加载显示微型端口驱动程序时,WDDM 端口驱动程序会查询所有依赖于驱动程序支持的功能。
驱动程序可以在加载时查询 WDDM 端口驱动程序,以便获取受支持的功能。