Получение ошибки (код 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.

Другие вопросы по тегам