DPInst / DIFX non verrà installato firmato conducente in silenzio
-
12-10-2019 - |
Domanda
Quando si installa un driver firmato (vale a dire con un CAB debitamente firmato) su Windows 7 tramite DPInst, a meno che non si tratta di un driver WHQL-firmato, non è possibile installarlo in silenzio. Se si esegue DPInst in modalità non in silenzio, sarà chiede di fidarsi del "editore". Se si esegue DPInst in modalità silenziosa, fallirebbe con un codice di errore di firma-correlato (si parla di 0x800B0109 - controllare il Setupapi.app.log).
Soluzione 2
Il modo più semplice per farlo è quello di aggiungere il certificato di firma per i TrustedPublishers. Si può fare programatically (l'attuazione delle Win32Exception viene lasciato come esercizio per il lettore):
#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);
}
}
Altri suggerimenti
Mentre la risposta di Ilya è buona, la soluzione su Windows 7 è ancora più facile. Il comando di seguito implementa il certificato sia per l'utente corrente e il sistema di fiducia negozi certificato autori. Si richiede privilegi amministrativi ed è fornito da Microsoft.
Per Windows 7
certutil.exe -addstore TrustedPublisher cert.cer
I verificato che questo funziona su Windows 7 64-bit Per distribuire firmato, ma non certificati WHQL, i conducenti -. Senza chiedere conferma all'utente
Windows XP
WHQL Certificazione
Sembra che su XP è comunque necessario avere i driver certificati WHQL al fine di richieste Evita su installa.
Pre-Installazione di SPC su Windows XP
Per Windows XP è necessario scaricare Windows Server 2003 Admin Tools Pack da Microsoft e l'estratto Certutil.exe e Certadm.dll. Quindi il comando precedente lavoro sarà su XP pure.
Admin Tools Pack: http://www.microsoft. com / download / it / Details.aspx? DisplayLang = it & id = 16770
Si noti che il file msi estratto può essere controllato da 7-zip, quindi non è necessario installarlo per ottenere l'EXE e DLL è necessario.
E la domanda è? Se il driver non è WHQL-certified, esso non può essere installato in silenzio. Questa è una misura di protezione di Windows.
I conducenti devono passare attraverso la certificazione WHQL per evitare qualsiasi tipo di non-firmato pop-up.
Se siete alla ricerca di terze parti provider di servizi WHQLTesting farci sapere, saremo lieti di aiutarvi in ??questa materia.