Windows XP SetupAPI отказывается устанавливать не-WHQL-подписанные.INF из службы

Мой сервис вызывает SetupCopyOEMInf для установки файла Authenticode, но не WHQL, подписанного INF. SetupCopyOEMInf возвращается с CERT_E_WRONG_USAGE (0x800B0110), и INF файл не устанавливается.

1 ответ

Основной намек на эту строку:

# E359 Неподписанный или неправильно подписанный файл "foobar.cat" заблокирован (установка сервера). Ошибка 0x800b0110: сертификат недействителен для запрошенного использования.

Обратите внимание на установку сервера - это SetupAPI-talk для "автоматической установки". В основном, это то, что происходит, когда вы вставляете устройство, для которого у вас есть подписанный драйвер устройства (в Windows XP, только WHQL-подписанный) и его установка автоматически (с пассивным информационным шаром, чтобы вы знали).

В эпоху Windows XP Microsoft поощряла разработчиков WHQL-сертифицировать свои драйверы, исключая драйверы WHQL без автоматической установки; то есть, когда пользователь подключит ваше устройство, он получит мастер "Добавить новое оборудование", даже если драйвер был готов (например, в хранилище драйверов). Это имеет все, что связано с так называемыми сигнатурными оценками.

Хотя пользователь может применять политику для игнорирования сбоев подписи, она применяется только к "клиентским установкам" (т.е. интерактивным). Как будто злоба, "установка сервера" в Windows XP безнадежно требует WHQL. (*)

Обходной путь, в моем случае, состоял в том, чтобы вызвать SetupCopyOEMInf из обычного процесса, что приводит к следующему (успешному) сообщению:

# E361 Будет установлен неподписанный или неправильно подписанный файл "foobar.cat" (Policy = Ignore). Ошибка 0x800b0110: сертификат недействителен для запрошенного использования.

(*) На самом деле, не только WHQL - любой сертификат, в котором используется "Windows System Component Verification" (1.3.6.1.4.1.311.10.3.6). Сертификат Authenticode не один.

licensed under cc by-sa 3.0 with attribution.