dpinst / difx не установит подписанный драйвер молча
-
12-10-2019 - |
Вопрос
При установке подписанного драйвера (т.е. с правильно подписанным .cab) в Windows 7 через DPINST, если это не драйвер, подписанный WHQL, вы не можете установить его молча. Если вы запустите DPINST в не-сильном режиме, он побудит вас доверять «издателю». Если вы запустите DPINST в Silent Mode, это не удалось бы с кодом ошибки, связанной с подписанием (что-то вроде 0x800B0109-проверьте свой setupApi.app.log).
Решение 2
Простой способ сделать это - добавить сертификат подписания в TrustPublishers. Вы можете сделать это программатически (реализация 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 еще проще. Приведенная ниже команда развертывает сертификат как текущему пользователю, так и в хранилищах сертификатов System Trust Publisher. Это требует административных привилегий и предоставляется Microsoft.
Для Windows 7
certutil.exe -addstore TrustedPublisher cert.cer
Я подтвердил, что это работает на 64-битном Windows 7-разрядке для развертывания подписанного, но не сертифицированного WHQL, драйверов-без подсказки пользователя.
Windows XP
Сертификация WHQL
Похоже, что на XP вам все еще нужно, чтобы драйверы сертифицировали WHQL, чтобы избежать подсказок при установке.
Предварительное установка SPC в Windows XP
Для Windows XP вам нужно будет загрузить пакет инструментов Admin Admin Windows 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, сообщаем нам, мы будем рады помочь вам в этом.