Получение ошибки (код 52) от подписанного драйвера - PullRequest
0 голосов
/ 12 марта 2019

Извините за длину, но я хотел получить как можно больше деталей.

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

... Я получаю "Успешно подтверждено"

1 Ответ

1 голос
/ 14 марта 2019

Начиная с Windows 10 (версия 1607), драйверы режима ядра должны быть подписаны Microsoft.
Смотри также:

В Windows 10 драйвер был переписан с использованием инфраструктуры драйверов режима ядра, которая улучшает общую стабильность драйвера.

Я думаю, ваш драйвер должен быть подписан Microsoft.
У меня та же ошибка (код 52) при установке драйвера без подписи Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...