2016-10-12 3 views
8

Ситуация: У нас есть программный пакет, который взаимодействует с устройством, которое мы построили в доме. Устройство использует WinUSB для связи, EXCEPT в режиме загрузки во время обновления прошивки. В режиме загрузки устройство использует различные идентификаторы VendorID и ProductID и использует HID для связи.Есть ли способ определить, устанавливает ли Windows драйвер устройства?

Проблема: Для обновления прошивки мы отправляем команду и указываем устройству войти в режим загрузки. Устройство повторно перечисляет новый VID и PID. При обновлении прошивки на новой машине, у которой раньше не было устройства в режиме загрузки, в Windows появляется «установка драйвера», когда появляется загрузчик. (Нет драйвера для установки). Программное обеспечение получает событие DEVICE ATTACHED, поэтому мы начинаем обновление прошивки. Как только Windows завершит установку драйвера, он де-перечисляет и повторно перечисляет устройство, закрывая наш дескриптор файла в середине обновления.

Вопрос: Есть ли способ, чтобы обнаружить, если ОС Windows устанавливает драйвер, так что мы можем ждать, пока устройство повторно перечислены перед началом процесса обновления? Есть ли что-то, что мы можем сделать в нашей установке, чтобы превзойти это поведение? Может быть, способ сказать Windows, что мы не хотим разрешать установку драйвера, пока мы подключаемся к устройству?

+0

Почему вы не проверяете, скажите 9 секунд через 3 интервала 3 секунды, если исполняемый файл «установка драйвера» работает в системе? – r1verside

+0

Кроме того, я думаю, вы можете записать, сколько раз вы видели это устройство в своем приложении, чтобы вы знали, что это первый раз, и вам придется подождать. – r1verside

+0

@ r1verside, я дал немного попробовать, но пока это не очень чистое или эффективное решение. В зависимости от того, решит ли Windows проверить драйвер в режиме онлайн, скорость соединения пользователя и т. Д., Количество ожидающих времени может сильно варьироваться. Плюс я бы предпочел не тратить время на пользователя, ожидая каждый раз, когда они обновляют прошивку, если я могу помочь. (Нет необходимости ждать, если Windows узнает устройство при последующем обновлении прошивки). – GPearson

ответ

1

Возможно, можно сказать Windows, что мы не хотим разрешать установку драйвера во время подключения к устройству?

В Microsoft Developer Network имеется раздел для разработки оборудования. У них есть статья specifically about this issue. Важно отметить, что в документе указано, что приложение установки вашего устройства должно «определить, выполняются ли другие действия по установке перед выполнением его установок» (если упор делается на мойку), и - если ожидающие установки обнаружены - «должен выйти».

Эта последняя часть заявления, по-видимому, указывает на то, что Microsoft дает приоритет уже установке или в ожидании установок приложений для устройств.

Если постановка задачи является точным:

При обновлении прошивки на новую машину, которая не имела устройство в режим загрузки, подключенный перед тем, Windows делает «Установка драйвера» танец, когда загрузчик показывает вверх ,

Похоже, вам может быть не повезло - или нарушить соглашение - пытаясь вытеснить поведение установки драйвера.

Я бы воспользовался вышеуказанными CMP_WaitNoPendingInstallEventsfunction, после чего начнется обновление программного обеспечения. I думаю VID/PID не имеют значения, здесь, в зависимости от того, где работает ваш код обновления прошивки. Он выглядит как онлайн-форум OSR has a question of the same nature и предполагает тот же приоритет (установка драйвера).