Некорректная работа USB Serial принтера. В чём дело?
Имеется система Windows 10 IoT Enterprise (исходная точка разработки, по определённым причинам поменять на другую её не получится). Под неё разрабатывается система, частью которой являются внешние устройства, одно из которых - принтер (не классический HP и т.п.). При подключении этого принтера к системе, даже в случае если разрабатываемое ПО не запущено, принтер начинает печатать "мусорные бланки". Подключается он посредством USB-B to USB-A кабеля, в системе определяется как USB Serial Device с COM9 - исходя из данных девайс менеджера системы. Во время процесса этой печати так же невозможно программно открыть COM порт, который задействован для принтера. Открытие и печать того, что нам нужно, можно произвести только по окончанию печати. Методом долгих исследований удалось выяснить, что дело в usbser.sys драйвере Windows 10 IoT Enterprise (FTDI драйвер для этого устройства корректно не ставится). Мусорная печать начинается только после запуска системы в момент опроса всех подключённых устройств. Или после того как USB-B кабель был вставлен в порт принтера при уже загруженной системе, при отключении - сразу останавливается. Под рукой оказались Windows 10 Pro и Windows 10 Enterprise Evaluation (без IoT) - при подключении принтера тем же способом к ним такого поведения не наблюдается. COM порт успешно открывается сразу же и принтер без проблем начинает печатать сходу. Тип устройства и драйвер определяются такими же.
Теоретическая причина такого странного поведения: указанный USB драйвер для IoT Enterprise отличается по формату отправляемых дескрипторов для этого класса устройств и принтер воспринимает низкоуровневые USB запроса как данные на печать.
Втыкать в другой USB-порт на компьютере IoT Enterprise пробовали, вероятность "грязного внутренного буфера" тоже исключается: питание принтера идёт от внешнего источника в 12V и до включения в него USB кабеля печать не происходит.
Вопрос: есть ли возможность заменить конкретно для этого устройства подходящий драйвер другим или написать под него фильтр? Наткнулся на информацию по последним, но так и не понял как правильно настроить.
Пробовали принудительно в диспетчере устройств заменить драйвер используемый устройством на взятый из обычной винды? Возможно помогут в отладке вот эти утилиты: usb devices view - утилита для просмотра USB девайсов и usboblivion - утилита для удаления следов USB девайсов.
VoidVolker, я копировал в отдельную папку usbser.inf и usbser.sys, взятые из Windows 10 Enterprise Evaluation, в систему IoT. При попытке вручную указать путь к этому драйверу в диспетчере система либо указывает на то, что самый лучший драйвер уже установлен, либо ссылается на отсутствие цифровой подписи.
Насчёт указанных программ: обязательно гляну, что нового они могут открыть. Благодарю
VoidVolker, из самой системы нет. Он интегрирован в неё и она не позволяет удалить даже в случае, если диск с системой подключён в качестве съёмного носителя к другому компьютеру
kolya_gazosvarka, не из системы, а удалить у самого девайса в диспетчере устройств, а уже потом вручную указывать нужный драйвер. Ну, или вообще в безопасном режиме отключить защиту системных файлов и ручками заменить файлы драйвера. Кстати, можно попробовать как раз в безопасном режиме удалить драйвер и установить нужный.
Возможно, Windows проводит опрос порта в попытках найти в нём AT-модем, или какая-то другая программа пытается сделать что-то похожее (найти своё оборудование на новом порту).
Не подскажу, как правильно диагностировать эту проблему, но раз у нас USB-устройство, я бы начал с захвата и анализа USB-трафика через WireShark. Из дампа может быть понятно, в какую сторону двигаться.
ValdikSS, по сути служба телефонии и отвечает за поиск AT-модемов? Отключил её в service.msc (попутно отключил ещё всё, что связано со СМАРТ картами). После перезапуска проблема осталась
Всем неравнодушным спасибо! Видимо решение найдено. Что было сделано:
1. [URL="https://profit-zip.ru/blog/windows/kak-eksportirov... этой статье[/URL] экспортировал usbser драйвер с другой системы
2. [URL="https://appuals.com/fix-this-operation-requires-in... этой инструкции[/URL] разрешил админу изменять системные ресурсы с драйверами (возможно этот шаг лишний, сейчас буду работать над оптимизацией решения и выясню это)
3. с помощью pnputil /add-driver "(путь к устанавливаемому драйверу .inf)" /install поставил драйвер в систему, т.к. через диспетчер устройств никак не хотел
4. В диспетчере устройств указал новый уже установленный .inf файл с драйвером именно для этого устройства. После перезапуска проблема исчезла
UPD: спустя пару перезапусков системы устройство не инициализировалось по причине отсутствия цифровой подписи установленного драйвера. Предварительно перед установкой нового я настройках запуска отключил проверку цифровой подписи. Ещё пробовал вариант с:
bcdedit /set nointegritychecks on
bcdedit /set testsigning on
но это не помогает: раз за разом система снова ссылается на отсутствие прав доступа или отсутствие цифровой подписи