dpinst / DifX не установит подписанный драйвер в автоматическом режиме
При установке подписанного драйвера (то есть с правильно подписанным.CAB) в Windows 7 через DpInst, если только он не подписан WHQL-драйвером, вы не можете установить его без вывода сообщений. Если вы запустите DpInst в режиме без вывода сообщений, он предложит вам доверять "издателю". Если вы запустите DpInst в режиме без вывода сообщений, произойдет сбой с кодом ошибки, связанным с подписью (например, 0x800b0109 - проверьте файл setupapi.app.log).
4 ответа
Простой способ сделать это - добавить сертификат подписи в TrustedPublishers. Вы можете сделать это программно (реализация win32exception оставлена в качестве упражнения для читателя):
#include <windows.h>
#include <wincrypt.h>
#include "win32exception.h"
void InstallTrustedPublisherCertificate(LPCTSTR CertificateFilePath)
{
DWORD dwContentType;
PCCERT_CONTEXT pCertContext = NULL;
if (!CryptQueryObject(
CERT_QUERY_OBJECT_FILE,
CertificateFilePath,
CERT_QUERY_CONTENT_FLAG_ALL,
CERT_QUERY_FORMAT_FLAG_ALL,
0,
NULL,
&dwContentType,
NULL,
NULL,
NULL,
(const void **)&pCertContext))
throw win32exception("CryptQueryObject");
if (dwContentType != CERT_QUERY_CONTENT_CERT)
throw exception("Incorrect content type of crypto object.");
__try
{
HCERTSTORE hCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
0,
CERT_STORE_OPEN_EXISTING_FLAG |
CERT_SYSTEM_STORE_CURRENT_USER,
_T("TrustedPublisher"));
if (hCertStore == NULL)
throw win32exception("CertOpenStore");
__try
{
if (CertAddCertificateContextToStore(hCertStore, pCertContext, CERT_STORE_ADD_NEWER, NULL))
{
// Added certificate to TrustedPublisher store.
}
else
{
DWORD err = GetLastError();
if (err == CRYPT_E_EXISTS)
{
// Certificate already exists in TrustedPublisher store.
}
else
throw win32exception("CertAddCertificateContextToStore", err);
}
}
__finally
{
CertCloseStore (hCertStore, 0);
}
}
__finally
{
CertFreeCertificateContext(pCertContext);
}
}
Хотя Илья ответит хорошо, решение для Windows 7 еще проще. Приведенная ниже команда развертывает сертификат как для текущего пользователя, так и для хранилищ сертификатов доверенного издателя системы. Это требует административных привилегий и предоставляется Microsoft.
Для Windows 7
certutil.exe -addstore TrustedPublisher cert.cer
Я проверил, что это работает на 64-битной Windows 7 для развертывания подписанных, но не WHQL-сертифицированных драйверов - без запроса пользователя.
Windows XP
WHQL сертификация
Похоже, что на XP вам все еще нужно иметь WHQL-сертифицированные драйверы, чтобы избежать подсказок при установке.
Предварительная установка SPC в Windows XP
Для Windows XP вам необходимо скачать пакет средств администрирования Windows Server 2003 от Microsoft и извлечь certutil.exe и certadm.dll. Тогда приведенная выше команда будет работать и на XP.
Пакет инструментов администратора: http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=16770
Обратите внимание, что извлеченный MSI-файл может быть проверен с помощью 7-zip, поэтому вам не нужно устанавливать его для получения нужного вам exe и dll.
А вопрос такой? Если драйвер не сертифицирован WHQL, он не может быть установлен без вывода сообщений. Это мера безопасности Windows.
Драйверы должны пройти сертификацию WHQL, чтобы избежать каких-либо не подписанных всплывающих окон.
Если вы ищете стороннего поставщика услуг WHQLTesting, сообщите нам об этом, мы будем рады помочь вам в этом.