ドライバーの Authenticode 署名を検証するための SetupAPI の使用

次の手順を使用して、ドライバー パッケージに有効な Authenticode デジタル署名があることを確認できます。 これらの手順は、Microsoft Windows Server 2003 以降のバージョンでサポートされています。

ドライバーに有効な Authenticode 署名があるかどうかを確認するには

DNF_AUTHENTICODE_SIGNED フラグを確認します。

ドライバー パッケージに有効な Authenticode 署名がある場合、Windows はドライバー ノードの SP_DRVINSTALL_PARAMS 構造体の Flags メンバーにこのフラグを設定します。 (また、ドライバーが WHQL リリース署名 を持っている場合、システム提供のドライバーである場合、または Authenticode 署名を持っている場合、Windows が DNF_INF_IS_SIGNED フラグを設定することにも注意してください。)

INF ファイルに有効な Authenticode 署名があることを確認するには

  1. SetupVerifyInfFile を呼び出します。

  2. 関数によって返されたエラー コードを確認します。

    INF ファイルがシステム指定ではなく、有効な WHQL デジタル署名を持っていないが、有効な Authenticode 署名がある場合、SetupVerifyInfFile は FALSE を返し、GetLastError は次のいずれかのエラー コードを返します。

    ERROR_AUTHENTICODE_TRUSTED_PUBLISHER
    発行元の証明書が信頼された発行元の証明書ストアにインストールされているため、発行元が信頼されていることを示します。

    Authenticode の信頼が確立されていません
    発行元の署名証明書が信頼された発行元証明書ストアにインストールされていないため、信頼を自動的に確立できないことを示します。 ただし、これは必ずしもエラーを示すわけではありません。 代わりに、呼び出し元は、発行元を信頼するために、呼び出し元に固有のポリシーを適用する必要があることを示します。

INF ファイルに有効な Authenticode 署名が付いている場合、SetupVerifyInfFile は、出力構造体 SP_INF_SIGNER_INFO に以下の情報も返します。

  • DigitalSigner メンバーは署名者の名前に設定されます。

  • CatalogFile メンバーは、対応する署名付きカタログ ファイルの完全パスに設定されます。

ただし、SetupVerifyInfFile は DigitalSignerVersion メンバー内のバージョンを返さないことに注意してください。

ファイルに有効な Authenticode 署名があることを確認するには

SPQ_SCAN_USE_CALLBACK_SIGNERINFO フラグを指定して、SetupAPI 関数 SetupScanFileQueue を呼び出します。

SetupScanFileQueue は、呼び出し元のコールバック ルーチンにSPFILENOTIFY_QUEUESCAN_SIGNERINFO要求を送信し、FILEPATHS_SIGNERINFO構造体へのポインターを渡します。 ファイルが有効な Authenticode シグネチャで署名されている場合、関数は、ファイルのコールバック ルーチンを呼び出す前に、エラー コードを適切なERROR_AUTHENTICODE_Xxx値に設定します。 この関数は、FILEPATHS_SIGNERINFO構造体に次の情報も設定します。

  • DigitalSigner メンバーは署名者の名前に設定されます。

  • CatalogFile メンバーは、対応する署名付きカタログ ファイルの完全パスに設定されます。

ただし、バージョンは Version メンバーで設定されていないことに注意してください。

SetupScanFileQueue は、このトピックで SetupVerifyInfFile について前述したのと同様に、ERROR_AUTHENTICODE_Xxx エラー コードを設定します。