Пользовательский USB VID / PID - заставьте Windows 7 и 8 автоматически выбирать драйвер usbser.sys

Я разрабатываю прошивку для USB-устройства с микроконтроллером STM32F070. Я создал базу кода без ОС (без ОС) с помощью STM32CubeMX, настраивая устройство как USB CDC (класс устройств связи), чтобы оно автоматически определялось как VCP (виртуальный COM-порт) в Windows 7, 8 и 10. Сведения о драйвере показывают, что оно использует драйвер Windows usbser.sys .

Конфигурация USB CDC в STM32CubeMX

Последовательное USB-устройство обнаружено в Диспетчере устройств Windows

Когда я меняю идентификатор поставщика USB (VID), идентификатор продукта (PID) или строку производителя, он по-прежнему быстро определяется как последовательное USB-устройство диспетчером устройств Windows 10, но не Windows 7 или 8. Windows 7 и 8 тратят долгое время искал в Центре обновления Windows драйвер, а потом не смог его найти.

Как я могу изменить прошивку / дескрипторы устройства, чтобы позволить хостам Windows 7 и 8 автоматически устанавливать драйвер usbser.sys для устройства, если у него есть зависящие от поставщика значения для USB VID, PID и строки производителя?


person cp.engr    schedule 09.01.2017    source источник


Ответы (2)


Windows 10 поставляется с новым драйвером usbser.inf, который будет соответствовать устройствам, соответствующим спецификации USB CDC ACM, и вызывать для них загрузку драйвера usbser.sys.

Чтобы ваше устройство USB CDC ACM работало в более старых версиях Windows, вам необходимо самостоятельно предоставить файл INF, который сообщает Windows о необходимости загрузки usbser.sys, когда оно обнаруживает USB-устройство с вашим идентификатором поставщика и идентификатором продукта. Для Windows 7, Vista и XP это просто вопрос записи файла INF и его распространения среди ваших клиентов. Для Windows 8 и более поздних версий вам нужно будет приобрести сертификат подписи кода, а затем подписать файл INF (или изучить программные утилиты, такие как zadig и libwdi, которые позволяют обойти проверку подписи).

Обратите внимание, что подписывание отличается от WHQL. Получив сертификат подписи, вы можете подписать драйвер самостоятельно, без ожидания или одобрения со стороны Microsoft.

Вот пример INF-файла, который использует usbser.sys:

https://github.com/pololu/a-star/blob/master/drivers/a-star.inf

О том, как подписывать пакеты драйверов, я много писал в этой статье:

http://www.davidegrayson.com/signing/

person David Grayson    schedule 09.01.2017
comment
Большое спасибо за ваши многочисленные полезные ответы на вопросы о USB за последние несколько месяцев. :) - person cp.engr; 09.01.2017
comment
Я просто хотел бы отметить, что файл a-star.inf у меня действительно работал. Все, что мне нужно было сделать, это изменить значения VID / PID. Огромное спасибо! - person hacksoi; 19.01.2019

проблема в .inf файле. в win 10 есть новый (usbser.inf), который автоматически загружает драйвер usbser.sys, в win 7 и 8 вам нужно написать свой собственный .inf файл, который связывает ваши PID и VID с драйвером usbser.sys, см. https://msdn.microsoft.com/de-de/library/windows/hardware/ff538820%28v=vs.85%29.aspx и https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx

В Windows 8.1 и более ранних версиях операционной системы Usbser.sys не загружается автоматически, когда к компьютеру подключено устройство USB-to-serial. Чтобы загрузить драйвер, вам нужно написать INF, который ссылается на INF модема (mdmcpq.inf) и включает разделы [Install] и [Needs]. Эти разделы необходимы для создания экземпляра службы, копирования двоичных файлов почтового ящика и регистрации GUID интерфейса устройства, который требуется приложениям для поиска устройства и взаимодействия с ним. Этот INF определяет "Usbser" как драйвер фильтра нижнего уровня в стеке устройств.

источник: https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx

В https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx, Нужно ли мне писать собственный USB-драйвер на стороне хоста для устройства CDC и https://community.nxp.com/thread/301439 - это примеры файлов .inf для Win 7. и 8.

person ralf htp    schedule 09.01.2017
comment
Правильно ли я понимаю, что в Win7 и 8 файл .inf выбирается на основе {VID, PID, MfrString}, поэтому то, что я просил, невозможно? Если мы не получим сертификат WHQL для устройства и не добавим его .inf в Центр обновления Windows - тогда Windows установит драйвер автоматически при перечислении устройства, верно? Или вместо WHQL мы могли бы использовать дескрипторы ОС Microsoft в устройстве, чтобы оно представляло хосту WCID, чтобы хост знал, что нужно выбрать usbser.sys в качестве драйвера, а .inf вообще не понадобился бы? - person cp.engr; 09.01.2017
comment
либо вам нужен файл .inf (WHQL), либо дескрипторы ОС MS. в случае дескрипторов ОС MS .inf не требуется (microchip.com/forums/m707870.aspx). Таким образом, с дескрипторами ОС MS это возможно без специального файла .inf. - person ralf htp; 09.01.2017
comment
Файл INF - это не то же самое, что WHQL. Вы можете использовать неподписанные INF-файлы в Windows 7 или более ранней версии, и даже в Windows 8 и более поздних версиях процесс подписания - это простая вещь, которую вы можете сделать самостоятельно после покупки сертификата для подписи кода и не требует одобрения со стороны Microsoft. - person David Grayson; 09.01.2017