当重复插入和移除设备时,写入USB HID设备的程序会导致“冻结”

时间:2011-01-17 15:07:19

标签: c# wmi hid

当我在低端计算机(XP专业版SP3)上拔出并重新插入自定义HID设备时,Windows会停止识别新的USB连接并断开任何USB端口(任何设备类别)。我们打开了驱动程序验证程序,并获得了一个0xC9错误检查(DRIVER_VERIFIER_IOMANAGER_VIOLATION),错误代码为0x21D(IRP调度处理程序在收到删除IRP时未正确地从其下面的堆栈中分离)。引用的驱动程序文件是HIDCORE.SYS。我们正在使用Windows内置的HID驱动程序。

问题只发生在我们编写的实用程序正在运行时,它会向设备发送一些命令。在此实用程序运行时,我们可以在USB“锁定”之前将设备连接和断开3到30次。任何连接的设备仍然可以工作,但不会识别新的连接/断开连接事件。它在低端机器上最具可重现性,但有时会发生在中端PC上。我们发现的唯一方法是重新启动,关闭我们的应用程序不会再次识别USB设备。

我们确保在收到断开连接事件时关闭设备的所有文件句柄。

我没有使用RegisterDeviceNotification,而是使用WMI ManagementEventWatcher来获取设备连接和断开连接时的事件。

我想知道如何避免这种“冻结”。我不确定我们的应用程序是否正确地与驱动程序断开连接,设备是否出错,或者Window XP HID驱动程序是否有问题。

0 个答案:

没有答案