Вопрос

При установке подписанного драйвера (т.е. с правильно подписанным .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, сообщаем нам, мы будем рады помочь вам в этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top