一、问题描述
物理机连接两个及以上相同的USB外设设备映射到虚拟机后物理机100%蓝屏
二、告警信息
物理机接三个USB外设映射到虚拟机内部,测试物理机蓝屏必现,虚拟机正常,虚拟机是客户端登录
三、处理过程
1、物理机登录VDI,接第3个USB外设设备映射到虚拟机后物理机会蓝屏,物理机关掉VDI然后插入3个USB设备正常 2、测试换一个不同系统版本的物理机接入虚拟机测试下同样的场景下,其他版本的系统还会存在这个问题 3、了解到三个设备是你们客户自己的设备,尝试添加白名单、reset名单、主控名单测试还是会蓝屏 4、取物理机蓝屏dump查看是IMAGE_UsbHub3.sys异常,查看蓝屏代码对应的错误是3.0 hub的驱动程序检测到了多个相同id的设备,发现序列号是一样的 5、查看三个USB设备的pid分别是0001、0002、0003,但序列号都是00000000050C,我们这边映射的时候会替换设备的pid、vid,映射时我们sfusbhub驱动会把pid、vid替换我们的,导致映射后在物理机上设备实例id变成一样的了,最终可能实例路径就是一样的 6、修改sfusbhub驱动(修改方案:sfusbhub驱动拦截获取设备实例id的接口,为三个设备返回不同的实例id),替换C:\Windows\System32\drivers这个目录下的sfusbhub.sys文件后测试正常
四、根因
Windows10物理机接入VDI虚拟机,将序列号相同的三个外设映射到虚拟机内部时,由于sfusbhub替换了vpid,导致系统为第二个和第三个设备生成的实例id完全一样,导致物理机蓝屏重启
五、解决方案
1、修改替换C:\Windows\System32\drivers这个目录下的sfusbhub.sys文件
2、单独出包VDC实施,客户端更新
六、建议与总结 1、客户自己的USB设备,特殊场景存在与VDI兼容问题,后续建议考虑这个场景进行规避 |