Запись программы на устройство USB HID приводит к «зависанию» при многократном вставлении и удалении устройства - PullRequest
1 голос
/ 17 января 2011

Когда я отсоединяю и повторно подключаю пользовательское устройство HID достаточное количество раз на слабом компьютере (XP Pro SP3), Windows перестает распознавать новые USB-подключения и отключается на любом USB-порту (любого класса устройства). Мы включили проверку драйверов и получили проверку на ошибки 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION) с кодом ошибки 0x21D (обработчик отправки IRP не отсоединился должным образом от стека под ним после получения удаления IRP). Ссылка на файл драйвера: HIDCORE.SYS. Мы используем драйвер HID, встроенный в Windows.

Проблема возникает, только когда запущенная нами утилита отправляет на устройство несколько команд. Во время работы этой утилиты мы можем подключать и отключать устройство от 3 до 30 раз, пока USB не «зависнет». Все подключенные устройства по-прежнему работают, но новые события подключения / отключения не распознаются. Это наиболее воспроизводимо на младших компьютерах, но иногда это происходит на ПК среднего уровня. Единственный выход, который мы нашли, это перезагрузка, закрытие нашего приложения не вызывает повторного распознавания USB-устройств.

Я удостоверился, что мы закрываем все наши файловые дескрипторы на устройстве, когда мы получаем событие отключения.

Я не использую RegisterDeviceNotification, скорее, я использую WMI ManagementEventWatcher для получения событий, когда устройства подключены и отключены.

Я хотел бы знать, как избежать этой "заморозки". Я не уверен, что наше приложение не отключается от драйвера должным образом, если устройство что-то делает не так, или если что-то не так, драйвер HID Window XP.

...