首先吐个槽:
微软的 Hyper-V 管理工具做得简直太烂了,竟不支持配置SR-IOV硬件直通,必须全部通过 PowerShell 指令才能实现;

今天做实验,需要将 win10 台式机上的 PCIe 无线网卡直通给 Kali Linux 虚拟机使用,查了各种文档资料,总算折腾成功了,也遇到了各种问题,这里记录一下整个配置过程,作为备忘!

配置方法

1. 获取虚拟机名称

Get-VM

Get hyperV vm name

2. 配置虚拟机解除DDA限制

Set-VM -VMName kali-linux-2025.3-hyperv-amd64 -AutomaticStopAction TurnOff

set vm AutomaticStopAction TurnOff

3. 优化虚拟机直通性能配置

#启用CPU的合并写入
set-vm -GuestControlledCacheTypes $true -Name kali-linux-2025.3-hyperv-amd64
#配置32位内存映射IO (MMIO)空间
set-vm -LowMemoryMappedIoSpace 3Gb -Name kali-linux-2025.3-hyperv-amd64
#配置大于32位的内存映射 MMIO 空间
set-vm -HighMemoryMappedIoSpace 33280Mb -VMName kali-linux-2025.3-hyperv-amd64

set vm MemoryMappedIoSpace

4. 查看要直通的设备路径

在宿主机的设备管理器中,查看并记录需要直通给虚拟机的设备路径信息
Locate device location path

5. 宿主机卸载需要直通的设备

可以通过设备管理器卸载
Dismount the device
也可以通过如下 PowerShell 指令强制卸载

Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(1B00)#PCI(0000)"
#如果有警告就加上 --force 参数强制卸载
Dismount-VMHostAssignableDevice -Force -LocationPath "PCIROOT(0)#PCI(1B00)#PCI(0000)"

PS Dismount the device

6. 分配设备给虚拟机

指定设备路径与虚拟机名称,将设备分配给虚拟机可访问

#分配设备给虚拟机
Add-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(1B00)#PCI(0000)" -VMName kali-linux-2025.3-hyperv-amd64

注意:此时如果指令执行报错,提示无法为虚拟机添加资源;请确认第 2 步的指令是否有执行成功,或漏掉了!

成功执行第 2 步的(Set-VM -AutomaticStopAction TurnOff)指令后再分配设备就不会报错了。
Assign device to guest VM

7. 虚拟机无法开机

此时直通设备给虚拟机的配置都完成了,但此时启动虚拟机会报错,虚拟机无法开机启动,
提示

无法打开电源,因为发生错误“虚拟机监控程序功能对于该用户来说不可用。” (0xC035001E)

VM-Can-not-startup.png

这是由于宿主机的安全性限制导致的,需要开启宿主机的 hypervisoriommupolicy特性,才能确保系统正确地映射内存地址,提供增强的虚拟化安全特性,以此才能支持 Hyper-V 的运行。

#开启后需要重启宿主机系统才能生效
bcdedit.exe /set hypervisoriommupolicy enable

enable hypervisor iommu policy

Last modification:October 25, 2025
如果觉得我的文章对你有用,请随意赞赏