Hyper-V 的 Discrete Device Assignment(DDA)可以把整张 PCIe 显卡或 NVMe 设备分配给虚拟机,让来宾系统直接安装原生驱动。根据 Microsoft Learn 在 2026 年更新的说明,DDA 宿主机适用于 Windows Server 2016、2019、2022、2025 和相应 Azure Local 环境;Windows 10/11 可以作为来宾系统,但普通 Windows 客户端不是这篇 DDA 教程的受支持宿主机。
高风险操作:DDA 会把设备从宿主机下线。显卡是宿主机唯一显示设备时,画面可能立刻消失;错误的 LocationPath、MMIO 或恢复步骤可能导致虚拟机无法启动或设备无法重新挂载。请准备远程管理、第二张显卡或带外管理,并先备份虚拟机和重要数据。
2026 年 DDA 的适用范围与前提
- 宿主机:Windows Server 2016 或更高版本,建议安装最新累积更新。
- 来宾系统:Windows Server 2016 或更高版本,或 Windows 10/11。
- 硬件:主板、固件和 PCIe 拓扑必须支持安全隔离;先运行 Microsoft 的
SurveyDDA.ps1。 - 虚拟机:应关闭检查点、动态内存和保存状态依赖,并按设备要求配置 MMIO。
- 驱动:消费级显卡厂商可能限制虚拟机直通,成功枚举不代表驱动一定支持。
以下原始实战步骤继续保留,但应结合 Microsoft Learn:Deploy graphics devices by using DDA 和你的服务器/设备厂商文档核对。
本文章所有PowerShell指令均在管理员下执行
先用 PowerShell 准备虚拟机和 MMIO
关闭目标虚拟机后,在宿主机管理员 PowerShell 中设置自动停止方式、写合并和 MMIO。下面数值来自 Microsoft 的单 GPU 实验示例,不是所有显卡的固定答案;出现“资源不足”时应按设备 BAR/MMIO 要求调整。
$vm = "TEST"
Set-VM -Name $vm -AutomaticStopAction TurnOff
Set-VM -GuestControlledCacheTypes $true -VMName $vm
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm
把 TEST 改成你的虚拟机名称。生产环境还应确认检查点、动态内存、远程管理和回滚方案符合设备厂商及 Microsoft 文档要求。
官方资料与适用范围
英伟达vGPU显卡帮助文档
GRID vGPU User Guide :(英文网页/英文PDF /中文网页[可能打不开])
官方资料与适用范围-文章(感谢这个大佬): https://www.licc.tech/article?id=35
第一步:查看你的设备是否支持
1.1 硬件和系统需求
系统要求:DDA 宿主机使用 Windows Server 2016 或更高版本;Microsoft 当前文档列出 Windows Server 2016、2019、2022、2025。Windows 10/11 可作为来宾系统,但不应把普通客户端当作受支持的 DDA 宿主机。
宿主机主板支持 SR-IOV 和 ACS 这些功能
关于硬件可以通过这个页面(Github)的脚本来检测
1.2 如何使用硬件检测的脚本?
下载这个脚本到任意位置,
如果PowerShell控制台提示禁止使用脚本,可以使用下列指令更改权限
Set-ExecutionPolicy -Scope Process RemoteSigned

再运行这个下载下来的脚本即可

按照说明可以判断你的硬件是否可以使用

第二步:创建虚拟机
(建议新建一台来进行实验,也可以用现成的)
2.1 打开新建虚拟机 虚拟机名字为 TEST

2.2.1内存设置
可以不使用动态内存, 如果说使用动态内存那么需要满足启动的RAM和最小的RAM相同 。

2.2.2 自动停止操作内容更改
将“自动停止操作”里面的操作从保存虚拟机状态改为强行关闭虚拟机

2.2.3 检查点类型设置

将检查点类型改为生产检查点,并取消勾选如果……
第三步:从宿主机“下线”设备
3.1 获取设备的位置路径
在设备管理器找到PCIE设备,这里是显卡GTX 750 Ti,并复制其属性中的详细信息中的位置路径的这一项。

即获得的路径是
PCIROOT(0)#PCI(0300)#PCI(0000)
3.2 禁用设备

右键显卡即可禁用设备
3.2 使用Powershell控制台将设备下线
格式规范
Dismount-VMHostAssignableDevice -LocationPath "设备路径" -force
我这里填写:
Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -force

3.2.1下线后的结果
这个设备将不会在设备管理器中的“按类型列出设备”中找到

但是可以在“列出资源”中看到

第四步:将显卡连接到对应的虚拟机上
4.1 将设备连接至虚拟机
命令格式
Add-VMAssignableDevice -LocationPath "设备路径" -VMName 虚拟机名称
我这里输入
Add-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -VMName TEST

如果一直到这个位置都是正常的 一般情况下是成功了的
4.2检查是否成功绑定上虚拟机
Get-VMAssignableDevice -VMName TEST

启动虚拟机并安装显卡驱动
这个是否通常情况下只要硬件没有问题,就可以体验直通过后的显卡了,具体的优化措施与细节可以去看参考内容中的官方资料与适用范围-文章。
如何把显卡恢复给宿主机
如果你进行到这一步,发现系统不支持而且不能正常使用
可以将设备与对应虚拟机解除绑定并重新上线设备:
5.1获取设备名称
命令格式
Get-VMAssignableDevice -VMName 虚拟机名称
我这里要输入
Get-VMAssignableDevice -VMName TEST
获取虚拟机中设备的位置路径,
这里的位置路径和前面的位置路径是一样的

即获得的位置路径是
"PCIROOT(0)#PCI(0300)#PCI(0000)"
5.2 解除与虚拟机的绑定
命令格式
Remove-VMAssignableDevice -LocationPath "位置路径" -VMName 虚拟机名称
我这里要输入的
Remove-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -VMName TEST

TIP:从这里复制代码到PowerShell可能会使-LocationPath前面的一个小斜杠“-”消失,暂时不清楚是什么BUG,大家请注意。
5.3 重新上线设备并启用设备
命令格式
Mount-VMHostAssignableDevice -LocationPath "位置路径"
我这里要输入的
Mount-VMHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"

重新上线设备成功

这个时候再启用设备即可,和刚刚的禁用设备步骤一样。

—-文章完—-
DDA 常见问题
Windows 11 Hyper-V 宿主机能照着做吗?
Microsoft 当前 DDA 图形设备文档把宿主机范围列为 Windows Server 和 Azure Local。Windows 11 上常见的是 GPU-P/GPU 分区等其他路线,不能把两套命令混用。
显卡直通后宿主机为什么看不到设备?
这是 DDA 的预期行为:设备被从宿主分区下线并独占分配给虚拟机。关机后先执行 Remove-VMAssignableDevice,再执行 Mount-VMHostAssignableDevice,最后在设备管理器重新启用。