dpinst / DifX не установит подписанный драйвер в автоматическом режиме - PullRequest
6 голосов
/ 23 декабря 2010

При установке подписанного драйвера (то есть с правильно подписанным .CAB) в Windows 7 через DpInst, если только он не подписан WHQL-драйвером, вы не можете установить его без вывода сообщений. Если вы запустите DpInst в режиме без вывода сообщений, он предложит вам доверять «издателю». Если вы запустите DpInst в режиме без вывода сообщений, произойдет сбой с кодом ошибки, связанным с подписанием (например, 0x800b0109 - проверьте файл setupapi.app.log).

Ответы [ 4 ]

5 голосов
/ 07 декабря 2011

Хотя ответ Илья хороший, решение для 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 вам нужно.

3 голосов
/ 23 декабря 2010

Простой способ сделать это - добавить сертификат подписи в 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);
    }
}
2 голосов
/ 23 декабря 2010

А вопрос такой? Если драйвер не сертифицирован WHQL, он не может быть установлен без вывода сообщений. Это мера безопасности Windows.

0 голосов
/ 05 января 2011

Драйверы должны пройти сертификацию WHQL, чтобы избежать каких-либо не подписанных всплывающих окон.

Если вам нужны сторонние поставщики услуг WHQLTesting, сообщите нам, мы будем радыпомочь вам в этом.

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