当我在低端机器 (XP Pro 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 驱动程序是否有问题。