当前位置: 首页 > news >正文

windows表现驱动开发-对非 DX API 的容器帮助

Windows 10 添加的机制对非 DX API 及其所依赖的底层 WDDM 体系结构细节产生了重大影响:

  • 半虚拟化 WDDM 适配器
  • 用户现在许可控制应用所使用的适配器,而这些应用本身并不进行区分
  • 通用驱动程序引入了一套新的设计原则

要保持与最新 Windows 10 功能的兼容性,得进行以下各部分所述的修改。

驱动程序 INF 修改

驱动程序必须将非 DX 运行时注册到相应的注册表位置,以便将其二进制文件安装到 Windows 安装的 system32 和 syswow64 子目录中。 在安装 INF 中,驱动程序可以在图形适配器注册表项的下列子项中定义多个值:

  • CopyToVmOverwrite
  • 根据需要更新复制到虚拟机
  • CopyToVmOverwriteWow64
  • CopyToVmWhenNewerWow64

通过前一个子项修改 system32 目录,后一个子项修改 syswow64 目录。 子项下的每个值类型必须是 REG_MULTI_SZ 或 REG_SZ。 如果值类型为 REG_MULTI_SZ,则值中最多必须包含 2 个字符串。 这意味着每个值定义一对字符串,其中第二个字符串可以为空。 对中的第一个名称是驱动程序存储区中文件的路径。 该路径是相对于驱动程序存储区根目录的,能够包含子目录。 对中的第二个名称是材料在 system32 或 syswow64 目录中的显示方式。 第二个名称必须只是文件名,不能包括路径。 假如第二个名称为空,则文件名与驱动程序存储区(不包括子目录)中的文件名相同。 这样,驱动程序在主机驱动程序存储区和来宾中就会运用不同的名称。

CopyToVmWhenNewer 和 CopyToVmWhenNewerWow64 图形适配器注册表子项下列出的记录只有在满足“较新”条件时才会覆盖目标文件。

在 Windows 10 版本 2004 中,“较新”条件会比较两个信息:

  • FileVersion
  • LastWriteTime

当目标文件以 .dll 或 .exe 后缀结尾时,FileVersion 将被用作最重要的比较值,其中最高的版本被视为“较新”。

如果目标材料的后缀不是 .dll 或 .exe,或者 FileVersion 相同,则 LastWriteTime 会被用作最小比较值,其中较晚的日期/时间会被视为“较新”。

在 2004 年以前的 Windows 10 版本中,“较新”条件只会比较文件的 ChangeTime。

示例 1

INF [DDInstall] 部分
HKR,“softgpukmd\CopyToVmOverwrite”,SoftGpuFiles,%REG_MULTI_SZ%,“CopyToVm\softgpu1.dll”,“softgpu2.dll”

该指令将在软件 (adapter) 项中创建注册表项:"HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite", SoftGpuFiles = REG_MULTI_SZ, "CopyToVm\softgpu1.dll", "softgpu2.dll"

OS 会将 <DriverStorePath>\CopyToVm\softgpu1.dll 复制到 %windir%\system32\softgpu2.dll

示例 2

INF [DDInstall] 部分:
HKR、“CopyToVmOverwrite”、“SoftGpuFiles1”、“%REG_MULTI_SZ%”、“softgpu1.dll”、“softgpu.dll”
HKR,“CopyToVmOverwrite”,SoftGpuFiles2,%REG_SZ%,“softgpu2.dll”

此指令将在软件 (adapter) 项中创建注册表项:
“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite”, SoftGpuFiles1 = REG_MULTI_SZ, “softgpu1.dll”, “softgpu.dll”
“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite”, SoftGpuFiles = REG_SZ, “softgpu2.dll”

OS 会将 <DriverStorePath>\softgpu1.dll to %windir%\system32\softgpu.dll 和 <DriverStorePath>\softgpu2.dll 复制到 %windir%\system32\softgpu2.dll

示例 3

INF [DDInstall] 部分:
HKR,“CopyToVmOverwriteWow64”,SoftGpuFiles,%REG_MULTI_SZ%,“Subdir1\Subdir2\softgpu2wow64.dll”,“softgpu.dll”

此指令将在软件 (adapter) 项中创建注册表项:
“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwriteWow64”, SoftGpuFiles = REG_MULTI_SZ, “Subdir1\Subdir2\softgpu2wow64.dll”, “softgpu.dll”

OS 会将 <DriverStorePath>\Subdir1\Subdir2\softgpu2wow64.dll 复制到 %windir%\syswow64\softgpu.dll

驱动程序对注册表和文件路径的修改

在容器内部,驱动程序存储区并不总是位于与通常相同的规范路径上。 要始终使用正确调整的路径,必须通过 D3DKMTQueryAdapterInfo 与 KMTQAITYPE_QUERYREGISTRY 以及 D3DDDI_QUERYREGISTRY_INFO 间接访问注册表和驱动程序存储区。

遵循 OS 默认适配器设置

默认适配器必须遵循存储在 OS 中的用户选择,这需要:

通过 DXGI 的 IDXGIFactory::EnumAdapters 枚举适配器,因为 DXGI 会遵循用户的选择。 适配器 0 根据用户的设置进行更改。
将通过 D3DKMTEnumAdapters2 获得的适配器顺序与 DXGI 的相匹配。 可能通过两种枚举技术之间的 LUID 关联来匹配适配器标识。 DXGI 通过 IDXGIAdapter::GetDesc 返回其 LUID。

DCHU 设计修改

尽可能遵循通用驱动程序的设计原则,这些原则可能会根据所支持的具体设备而有所不同。

D3DKMT 头

包含前面提到的办法和类型的标头可在 Windows SDK for Windows 10 2004 及更高版本中使用,而不是仅限在 WDK 中使用。

一种明确囊括必要标头的方法如下。 还可能有其他选择。

// Turn off NTSTATUS codes within windows.h, so that the more exhaustive ntstatus.h can be used.
#define UMDF_USING_NTSTATUS
#include  // For the vast majority of Windows functionality
#include  // For NT_SUCCESS
#include  // For the most exhaustive list of NTSTATUS codes
#include  // For D3DKMT support
http://www.jsqmd.com/news/365927/

相关文章:

  • MySQL啥时候用记录锁,啥时候用间隙锁?
  • 如何为复杂曲面选打标机?2026年打标机技术评测与推荐,解决定位精度痛点 - 品牌推荐
  • 告别低效繁琐!千笔,专科生专属的降AI率神器
  • 探寻知名的红色展厅设计品牌企业服务优势与价格 - 工业推荐榜
  • 聊聊口碑好的除尘滤筒大型厂家,靠谱供应商有哪些 - 工业品网
  • 2026-02-10_Tue _ 4进修结构 - 降本增效 - 设计降本-双向伸缩to单侧伸缩
  • 申海外名校咋选机构?北京十大留学机构划重点 - 博客湾
  • 用数据说话 8个AI论文软件测评:自考毕业论文写作必备工具推荐
  • 南京留学中介TOP10实测!名校冲刺看这篇就够 - 博客湾
  • 分享经验丰富的股权激励咨询,费用合理的品牌推荐 - mypinpai
  • 参考文献崩了?8个AI论文平台深度测评,专科生毕业论文写作全攻略
  • 医疗器械注册公司哪家好?2026年权威机构推荐榜单 - 速递信息
  • C# XML XmlSerializer 序列化缓存
  • 分析昆明可靠的智慧农贸集市,盛鲜智慧集贸值得选 - 工业品网
  • 实用指南:C++ 面向对象三大特性之一---多态
  • 气体在线监测系统采购指南:四大优质工厂深度测评(2026.2) - 品牌推荐大师1
  • 散白酒哪个地方的好,聊聊四川泸州川红高粱酒的独特魅力 - myqiye
  • 2026 嘉兴英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 说说全国阶梯护坡厂家,哪家质量好 - 工业品牌热点
  • 2026 太原英语雅思培训教育机构推荐;雅思培训课程中心权威口碑榜单 - 老周说教育
  • 2026 徐州英语雅思培训教育机构推荐;雅思培训课程中心权威口碑榜单 - 老周说教育
  • 年末闲置支付宝红包套装别浪费!这样处理轻松变现 - 团团收购物卡回收
  • 对程序编译与链接
  • 南昌冷轧带肋钢筋设备选购,这些大型厂家值得考虑 - mypinpai
  • 2026 太原英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 北京留学中介排名TOP10:同步全球前沿资讯助力申学之路 - 博客湾
  • 2026 广州英语雅思培训教育机构推荐|雅思培训课程中心权威口碑榜单 - 老周说教育
  • AI搜索时代必看:国内做GEO优化的头部公司有哪些?权威推荐清单 - 品牌推荐大师1
  • 2026 廊坊英语雅思培训教育机构推荐,雅思培训课程中心权威口碑榜单 - 老周说教育
  • 2026光电开关优质厂家推荐 适配多工业场景 - 资讯焦点