MsiGetFileSignatureInformationA 関数 (msi.h)

MsiGetFileSignatureInformation 関数は、デジタル署名されたファイルへのパスを取得し、ファイルの署名者証明書とハッシュを返します。 MsiGetFileSignatureInformation を呼び出して、 MsiDigitalCertificateMsiPatchCertificate、および MsiDigitalSignature テーブルを設定するために必要な署名者証明書とハッシュを取得できます。

Windows インストーラー 3.0 以降: Windows インストーラー 3.0 以降、Windows インストーラーは 、MsiPatchCertificate テーブルと MsiDigitalCertificate テーブルを使用して、パッチ (.msp ファイル) のデジタル署名を確認できます。 詳細については、「 セキュリティで保護されたインストールの作成に関するガイドライン 」および 「ユーザー アカウント制御 (UAC) パッチ適用」を参照してください。

Windows インストーラー 2.0: パッチのデジタル署名はサポートされていません。 Windows インストーラー 2.0 は、破損したリソースを検出する手段としてデジタル署名を使用し、外部キャビネットのデジタル署名のみを検証でき、 MsiDigitalSignature テーブルと MsiDigitalCertificate テーブルの使用によってのみ検証できます。

構文

HRESULT MsiGetFileSignatureInformationA(
  [in]      LPCSTR         szSignedObjectPath,
  [in]      DWORD          dwFlags,
  [out]     PCCERT_CONTEXT *ppcCertContext,
  [out]     LPBYTE         pbHashData,
  [in, out] LPDWORD        pcbHashData
);

パラメーター

[in] szSignedObjectPath

デジタル署名を含むファイルへの完全なパスを指定する null で終わる文字列へのポインター。

[in] dwFlags

特殊なエラー ケース フラグ。

フラグ 説明
MSI_INVALID_HASH_IS_FATAL
0x1
このフラグが設定されていない場合、および証明書コンテキストのみを要求する場合、デジタル署名の無効なハッシュによって MsiGetFileSignatureInformation が致命的なエラーを返すことはありません。

無効なハッシュの致命的なエラーを返すには、MSI_INVALID_HASH_IS_FATAL フラグを設定します。

[out] ppcCertContext

返された署名者証明書コンテキスト

[out] pbHashData

返されたハッシュ バッファー。 ハッシュ データが要求されていない場合、このパラメーターは NULL にすることができます。

[in, out] pcbHashData

pbHashData パラメーターが指すバッファーのサイズをバイト単位で指定する変数へのポインター。 pbHashDataNULL 以外の場合、このパラメーターを NULL にすることはできません。 ERROR_MORE_DATAが返された場合、 pbHashData はハッシュ データを保持するために必要なバッファーのサイズを指定します。 ERROR_SUCCESSが返された場合、ハッシュ バッファーに書き込まれたバイト数が返されます。 pbHashDataNULL の場合、pcbHashData パラメーターは無視されます。

戻り値

意味
ERROR_SUCCESS/S_OK
正常に完了しました。
ERROR_INVALID_PARAMETER
無効なパラメーターが指定されました。
ERROR_FUNCTION_FAILED

WinVerifyTrust はシステムでは使用できません。 MsiGetFileSignatureInformation には、システム上に Wintrust.dll ファイルが存在する必要があります。

ERROR_MORE_DATA
バッファーが小さすぎて、要求されたデータを保持できません。 ERROR_MORE_DATAが返された場合、 pcbHashData はハッシュ データを保持するために必要なバッファーのサイズを指定します。
TRUST_E_NOSIGNATURE
ファイルが署名されていません
TRUST_E_BAD_DIGEST
ファイルの現在のハッシュは、ファイルのデジタル署名に格納されているハッシュに従って無効です。
CERT_E_REVOKED
ファイルの署名者証明書が取り消されました。 ファイルのデジタル署名が侵害されています。
TRUST_E_SUBJECT_NOT_TRUSTED
サブジェクトは、指定された検証アクションに失敗しました。 ほとんどの信頼プロバイダーは、エラーの理由を説明するより詳細なエラー コードを返します。
TRUST_E_PROVIDER_UNKNOWN
信頼プロバイダーはこのシステムでは認識されません。
TRUST_E_ACTION_UNKNOWN
信頼プロバイダーは、指定されたアクションをサポートしていません。
TRUST_E_SUBJECT_FORM_UNKNOWN
信頼プロバイダーは、サブジェクトに指定されたフォームをサポートしていません。
 
 

MsiGetFileSignatureInformation は、HRESULT_FROM_WIN32によって同等HRESULT データ型にマップされたすべての Win32 エラー値も返します。

注釈

証明書コンテキストのみを要求する場合、デジタル署名の無効なハッシュでは 、MsiGetFileSignatureInformation から致命的なエラーが返されることはありません。 無効なハッシュの致命的なエラーを返すには、 dwFlags パラメーターに MSI_INVALID_HASH_IS_FATAL フラグを設定します。

証明書コンテキストとハッシュ情報は、 WinVerifyTrust の呼び出しによってファイルから抽出されます。 ppcCertContext パラメーターは、署名からの署名者証明書コンテキストの複製です。 完了したら、 CertFreeCertificateContext を呼び出して証明書コンテキストを解放するのは呼び出し元の責任です。

MsiGetFileSignatureInformation には、システム上に Wintrust.dll ファイルが存在する必要があることに注意してください。

注意

msi.h ヘッダーは、MSIGetFileSignatureInformation をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー。 Windows インストーラーのバージョン別に必須となる最小 Windows サービス パックに関する詳細については、Windows インストーラーの実行時の要件に関する記事を参照してください。
対象プラットフォーム Windows
ヘッダー msi.h
Library Msi.lib
[DLL] Msi.dll

こちらもご覧ください

デジタル署名と Windows インストーラー

MsiDigitalCertificate テーブル

MsiDigitalSignature テーブル