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

标签 windows crash serial-port driver freeze

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

它们通过以下方式连接:

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

只要解决一个问题,一切都很顺利。我遇到了驱动程序崩溃的情况,用户注销、关闭或重新启动。当前的解决方法是在注销之前禁用串行鼠标设备,这确实很痛苦。只要设备被禁用,一切就可以正常工作。

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

似乎当用户注销时,USB 设备突然断开连接,然后 Windows 尝试正常禁用该设备并等待直到确认,从而永远挂起。在汇编中,它似乎调用了一个永远不会返回的 .sys 文件。

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

最佳答案

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

应用程序使用 ShutdownBlockReasonCreate API 调用来阻止 Windows 关闭。然后,它使用 WM_QUERYENDSESSION API 调用监听重新启动或注销。当它收到此消息时,它会禁用设备,然后销毁创建的关闭 block 。

确实很痛苦,但很有效

关于windows - 使用虚拟桌面时串行鼠标设备崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206003/

相关文章:

windows - Windows 中的不朽进程;没办法杀死它

c++ - 如何在 C++ 代码块窗口中使用 boost 1.63 库?

Ruby redmine svn 提交后 Hook 非常慢

c# - 如何构建可以在窗口之间拖放用户控件的 WPF 应用程序?

android - 单击按钮时,应用程序在 android studio 中崩溃。显示应用程序名称已停止工作

iphone - ios应用崩溃

C 函数在串口关闭之前不会发送

c# - 在 C# 中,我如何监听已经打开的 COM(串行)端口?

单击按钮插入/查询 SQLite 数据库时,Android Studio 应用程序崩溃

c++ - LG TV Control through serial using Windows service runs about 30 seconds after PC power on - 如何更快地启动服务?