我有一些旧的基于串行的 USB 触摸屏系统,更换新硬件会很昂贵。
它们通过以下方式连接:
串行鼠标 -> 串行转 USB 适配器 -> 瘦客户端 -> 虚拟机
只要解决一个问题,一切都很顺利。我遇到了驱动程序崩溃的情况,用户注销、关闭或重新启动。当前的解决方法是在注销之前禁用串行鼠标设备,这确实很痛苦。只要设备被禁用,一切就可以正常工作。
我通过获取崩溃虚拟机的内存转储来对此问题进行了大量研究。
似乎当用户注销时,USB 设备突然断开连接,然后 Windows 尝试正常禁用该设备并等待直到确认,从而永远挂起。在汇编中,它似乎调用了一个永远不会返回的 .sys 文件。
对于这样的问题,有什么办法可以解决吗?您可以更改设备关闭顺序吗?或者也许告诉 Windows 不确保即插即用设备已关闭?我怀疑供应商是否愿意更换他们的驱动程序。
最佳答案
我为这个问题编写了一个自定义解决方案。
应用程序使用 ShutdownBlockReasonCreate API 调用来阻止 Windows 关闭。然后,它使用 WM_QUERYENDSESSION API 调用监听重新启动或注销。当它收到此消息时,它会禁用设备,然后销毁创建的关闭 block 。
确实很痛苦,但很有效
关于windows - 使用虚拟桌面时串行鼠标设备崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206003/