Извините за длину, но я хотел получить как можно больше деталей.
TL; DR: Файл драйвера, который я подписал с использованием signtool
& Verisign, по-прежнему выдает ошибку Code 52 при установке.
Я создал INF-файл для устройства, которое использует файл драйвера usbser.sys, однако, несмотря на то, что я подписал его, у меня возникают проблемы при установке его на целевой машине, в частности, я получаю следующая ошибка ...
Windows не может проверить цифровую подпись для драйверов, необходимых для этого устройства. Недавнее изменение оборудования или программного обеспечения могло привести к установке файла, который подписан неправильно или поврежден, или это могло быть вредоносное программное обеспечение из неизвестного источника. (Код 52)
Я создал INF-файл, используя образец файла, который нашел здесь ...
https://gist.github.com/tracernz/26a5c4343cec83462fed
Я немного изменил его, но не хочу вставлять весь файл. Вот некоторые из основных моментов ...
[Version]
Signature="$Windows NT$"
DriverPackageType = PlugAndPlay
DriverPackageDisplayName = %Device%
Class=Ports
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318}
Provider=%Provider%
CatalogFile=myfile.cat
DriverVer=07/16/2016,10.0.14393.0
[Manufacturer]
%Provider% = UsbDevice, NTamd64
[UsbDevice.NTamd64]
%Device% = Usb_Install, USB\VID_2102&PID_0003\5&2E3CC8B3&0&8
[Strings]
Provider = "MyCompany Ltd."
Device = "My Own Device"
(я также удалил строку GenericDriverInstalled,,,,1
, потому что INFVERIF выдавал ошибку из-за нее, и я не смог найти в Интернете ничего, что объясняло бы, что он должен был делать или как исправить ошибку)
Целевой компьютер - 64-битная Windows 10 IoT Enterprise.
Итак, я создаю свой файл cat с помощью inf2cat (/os:10_X64
) - ошибок нет («Создание каталога завершено»)
Затем я подписываю файл cat с помощью этой команды:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" sign /f ..\MyCertificate.pfx /p MyPassword /t http://timestamp.verisign.com/scripts/timstamp.dll /v myfile.cat
Это считается успешным.
Затем я копирую каталог, содержащий myfile.inf, myfile.cat и usbser.sys, на целевую машину.
На этой машине, если я смотрю в диспетчере устройств, я вижу свое устройство, но не с правильным именем %UNWANTED_CDC_NAME% (COM4)
- Я не уверен, откуда это исходит. USB\VID_2102&PID_0003\5&2E3CC8B3&0&8
в INF-файле выше совпадает с путем к экземпляру устройства для этого устройства.
Я запускаю pnputil \add-driver myfile.inf
, и диалоговое окно спрашивает меня, доверяю ли я издателю, с которым я согласен, и сообщается об успехе.
Но в диспетчере устройств мое устройство не изменило свое имя на «Мое собственное устройство», как я ожидал!
Поэтому я щелкаю правой кнопкой мыши на моем устройстве, «Обновление программного обеспечения драйверов», «Поиск драйверов на моем компьютере», «Позвольте мне выбрать из списка драйверов устройств на моем компьютере», «Иметь диск ...» и выберите myfile.inf
Показывает «Мое собственное устройство» под моделью и говорит «Этот драйвер имеет подпись Authenticode (tm)».
Но когда я нажимаю «Далее», я получаю сообщение об ошибке, в котором говорится, что «установка этого драйвера устройства не рекомендуется, поскольку Windows не может проверить его совместимость с вашим оборудованием». Я нажимаю «Да», чтобы продолжить установку, а затем «Windows успешно обновила программное обеспечение вашего драйвера», но требуется перезагрузка.
Итак, я согласен на перезагрузку и вижу, что мое устройство теперь имеет правильное имя, но с желтым восклицательным знаком. Я просматриваю свойства и вижу ошибку Code 52 в верхней части этого вопроса.
Еще одна деталь - я тогда использовал signtool
для проверки подписи.
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v myfile.cat
Я получаю список сертификатов в «Подписание цепочки сертификатов», начиная с Verisign, и список в Timestamp, начинающийся с Thawte Timestamping CA, но затем появляется ошибка:
Ошибка SignTool: цепочка сертификатов обработана, но завершена корневым сертификатом, который не является доверенным поставщиком доверия.
Это причина ошибки Code 52? Почему я получаю это, разве Verisign не доверяют?
Редактировать - Хотя, если я сделаю
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v /pa myfile.cat
... Я получаю "Успешно подтверждено"