使用虚拟桌面时串行鼠标设备崩溃

Serial Mouse device crashes using virtual desktop

我有一些旧的基于串行的 USB 触摸屏系统,更换新硬件会很昂贵。

它们的连接方式如下:

串口鼠标 -> 串口转 USB 适配器 -> 瘦客户端 -> 虚拟机

一个问题一切正常。我遇到了驱动程序崩溃,所有用户注销、关机或重新启动。当前的解决方法是在注销之前禁用串行鼠标设备,这真的很痛苦。只要设备被禁用,一切都很好。

我通过获取崩溃虚拟机的内存转储对这个问题进行了大量研究。

好像当用户注销时,USB 设备突然断开连接,然后Windows 尝试优雅地禁用设备并等待确认,因此永远挂起。在程序集中,它似乎调用了一个永远不会 returns 返回的 .sys 文件。

有什么可以解决这样的问题的吗?您可以更改设备关机顺序吗?或者告诉 Windows 不确保即插即用设备已关闭?我怀疑供应商是否愿意更换他们的驱动程序。

我为这个问题编写了自定义解决方案。

应用程序使用 ShutdownBlockReasonCreate API 调用来阻止 Windows 关闭。然后它使用 WM_QUERYENDSESSION API 调用监听重启或注销。当它得到这个时,它禁用了设备,然后销毁了创建的关闭块。

真的很痛苦,但它有效