DPInst / DIFx nicht unbeaufsichtigte Installation signierter Treiber
-
12-10-2019 - |
Frage
Wenn Sie einen signierten Treiber zu installieren (das heißt mit einem ordnungsgemäß unterzeichnet .cab) auf Windows 7 durch DPInst, es sei denn, es ist ein WHQL-signierten Treiber ist, können Sie es still nicht installieren. Wenn Sie DPInst im Nicht-Silent-Modus ausführen, werden Sie aufgefordert, die „Publisher“ zu vertrauen. Wenn Sie DPInst im Silent-Modus laufen, wäre es mit einer Unterzeichnung bezogenen Fehlercode fehlschlagen (so etwas wie 0X800B0109 - überprüfen Sie Ihre setupapi.app.log).
Lösung 2
Der einfachste Weg, es zu tun ist, um das Signaturzertifikat auf die TrustedPublishers hinzuzufügen. Sie können es programmatisch tun (die Umsetzung der Win32Exception wird als Übung dem Leser überlassen):
#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);
}
}
Andere Tipps
Während Ilyas Antwort gut ist, ist die Lösung auf Windows 7 noch einfacher. Der Befehl unten entfalten sowohl das Zertifikat an den aktuellen Benutzer und das System Verlag Zertifikat speichert vertraut. Es sind Administratorrechte erforderlich und wird von Microsoft zur Verfügung gestellt.
Für Windows 7
certutil.exe -addstore TrustedPublisher cert.cer
ich festgestellt, dass dies funktioniert auf Windows 7 64-Bit unterzeichnet zu implementieren, aber nicht WHQL-zertifiziert Treiber -. Ohne Benutzeraufforderung
Windows XP
WHQL-Zertifizierung
Es scheint, dass auf XP Sie noch die Treiber WHQL-zertifiziert haben müssen, um zu vermeiden Anweisungen auf installieren.
Pre-Installation von SPC auf Windows XP
Für Windows XP werden Sie die Windows Server 2003 Admin Tools Pack von Microsoft und Extrakt certutil.exe und certadm.dll herunterladen. Dann wird der Befehl über die Arbeiten an XP als auch.
Admin Tools Pack: http://www.microsoft. com / download / en / details.aspx? displaylang = en & id = 16770
Beachten Sie, dass die extrahierte msi-Datei kann von 7-zip überprüft werden, so dass Sie es nicht brauchen zu installieren, um die exe zu erhalten und dll Sie brauchen.
Und die Frage ist? Wenn der Treiber nicht WHQL-zertifiziert, kann es nicht automatisch installiert werden. Dies ist eine Sicherheitsmaßnahme von Windows.
Die Treiber haben durch WHQL-Zertifizierung gehen, jede Art von un-signierten Pop-ups zu vermeiden.
Wenn Sie auf der Suche nach einer dritten Partei WHQLTesting Dienstleister lassen Sie uns wissen, wir würden uns freuen, Sie in dieser Hinsicht zu helfen.