MsiGetFileSignatureInformationA 函数 (msi.h)

MsiGetFileSignatureInformation 函数采用已数字签名的文件的路径,并返回文件的签名者证书和哈希。 MsiGetFileSignatureInformation 可以调用以获取填充 MsiDigitalCertificateMsiPatchCertificate以及 MsiDigitalSignature 表所需的签名者证书和哈希。

Windows Installer 3.0 及更高版本:从 Windows Installer 3.0 开始,Windows Installer 可以使用 MsiPatchCertificateMsiDigitalCertificate 表来验证修补程序(.msp 文件)的数字签名。 有关详细信息,请参阅 创作安全安装用户帐户控制(UAC)修补指南。

Windows Installer 2.0:不支持 修补程序的数字签名。 Windows Installer 2.0 使用数字签名来检测损坏的资源,并且只能验证外部内阁的数字签名,并且仅通过使用 MsiDigitalSignatureMsiDigitalCertificate 表。

语法

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 参数指向的缓冲区的大小(以字节为单位)。 如果 pbHashData 为非NULL,则此参数不能 NULL。 如果返回ERROR_MORE_DATA,pbHashData 提供保存哈希数据所需的缓冲区大小。 如果返回ERROR_SUCCESS,它将提供写入哈希缓冲区的字节数。 如果 pbHashData NULL,则忽略 参数。

返回值

价值 意义
ERROR_SUCCESS/S_OK
成功完成。
ERROR_INVALID_PARAMETER
指定了无效参数。
ERROR_FUNCTION_FAILED

WinVerifyTrust 在系统上不可用。 MsiGetFileSignatureInformation 需要系统上存在 Wintrust.dll 文件。

ERROR_MORE_DATA
缓冲区太小,无法保存请求的数据。 如果返回ERROR_MORE_DATA, 提供保存哈希数据所需的缓冲区大小。
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 数据类型的所有 Win32 错误值,方法是 HRESULT_FROM_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 Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer。 有关 Windows Installer 版本所需的最低 Windows Service Pack 的信息,请参阅 Windows Installer Run-Time 要求。
目标平台 窗户
标头 msi.h
Msi.lib
DLL Msi.dll

另请参阅

数字签名和 Windows Installer

MsiDigitalCertificate 表

MsiDigitalSignature 表