DPINST / DIFXは署名ドライバーを静かにインストールしません
-
12-10-2019 - |
質問
Windows 7からDPINSTに署名されたドライバー(つまり、適切に署名された.cab)をインストールする場合、whql-signedドライバーでない限り、静かにインストールすることはできません。非サイレントモードでdpinstを実行すると、「パブリッシャー」を信頼するように促されます。サイレントモードでDPINSTを実行すると、署名関連のエラーコード(0x800B0109のようなもの-Setupapi.app.logのようなもの)で失敗します。
解決 2
それを行うための簡単な方法は、署名証明書を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);
}
}
他のヒント
Ilyaの答えは良いですが、Windows 7の解決策はさらに簡単です。以下のコマンドは、現在のユーザーとシステム信頼できる出版社証明書ストアの両方に証明書を展開します。管理特権が必要であり、Microsoftによって提供されています。
Windows 7用
certutil.exe -addstore TrustedPublisher cert.cer
これは、Windows 7 64ビットで動作して署名されたが、ユーザーに促すことなく署名されたドライバーではないことを確認しました。
Windows XP
WHQL認定
XPでは、インストールのプロンプトを避けるために、ドライバーをwhql認定してもらう必要があるようです。
Windows XPでSPCをプリインストールします
Windows XPの場合、MicrosoftからWindows Server 2003 Admin Tools Packをダウンロードし、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サービスプロバイダーをお探しの場合は、お知らせください。この点で喜んでお手伝いします。