Получение ошибки (код 52) от подписанного драйвера
Извините за длину, но я хотел получить как можно больше подробностей.
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. инф
Он показывает "Мое собственное устройство" под моделью и говорит: "Этот драйвер имеет подпись Authenticode(tm)".
Но когда я нажимаю "Далее", я получаю сообщение об ошибке, в котором говорится, что "установка этого драйвера устройства не рекомендуется, поскольку Windows не может проверить его совместимость с вашим оборудованием". Я нажимаю "Да", чтобы продолжить установку, а затем "Windows успешно обновила программное обеспечение вашего драйвера", но требуется перезагрузка.
Поэтому я согласен на перезагрузку и вижу, что мое устройство теперь имеет правильное имя, но с желтым восклицательным знаком. Я просматриваю свойства и вижу ошибку Code 52 в верхней части этого вопроса.
Еще одна деталь - я вернулся тогда, чтобы использовать signtool
проверить подпись.
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v myfile.cat
Я получаю список сертификатов в "Подписывающей цепочке сертификатов", начиная с Verisign, и список в "Временной метке", начинающейся с "Thawte Timestamping CA", но затем появляется сообщение об ошибке:
Ошибка SignTool: цепочка сертификатов обработана, но завершена корневым сертификатом, который не является доверенным поставщиком доверия.
Это причина ошибки Code 52? Почему я получаю это, разве Verisign не доверяют?
Редактировать - Хотя, если я сделаю
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v /pa myfile.cat
... Я получаю "Успешно подтверждено"
1 ответ
Начиная с Windows 10(версия 1607), драйверы режима ядра должны быть подписаны Microsoft.
Смотрите также:
В Windows 10 драйвер был переписан с использованием инфраструктуры драйверов режима ядра, которая улучшает общую стабильность драйвера.
Я думаю, что ваш драйвер должен быть подписан Microsoft.
У меня та же ошибка (код 52), когда я установил драйвер без подписи Microsoft.