msiGetFileSignatureInformationA 函数 (msi.h)
MsiGetFileSignatureInformation 函数采用已进行数字签名的文件的路径,并返回文件的签名者证书和哈希。 可以调用 MsiGetFileSignatureInformation 以获取填充 MsiDigitalCertificate、MsiPatchCertificate 和 MsiDigitalSignature 表所需的签名者证书和哈希。
Windows Installer 3.0 及更高版本: 从 Windows Installer 3.0 开始,Windows Installer 可以使用 MsiPatchCertificate 和 MsiDigitalCertificate 表验证) 修补程序 (.msp 文件的数字签名。 有关详细信息,请参阅创作安全安装和用户帐户控制指南 (UAC) 修补。
Windows Installer 2.0: 不支持修补程序的数字签名。 Windows Installer 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
特殊错误情况标志。
标志 | 含义 |
---|---|
|
如果不设置此标志,并且仅请求证书上下文时,数字签名中的无效哈希不会导致 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,则忽略该参数。
返回值
值 | 含义 |
---|---|
|
成功完成。 |
|
指定的参数无效。 |
|
WinVerifyTrust 在系统上不可用。 MsiGetFileSignatureInformation 要求系统上存在 Wintrust.dll 文件。 |
|
缓冲区太小,无法保存请求的数据。 如果返回ERROR_MORE_DATA, 则ERROR_MORE_DATA,则ERROR_MORE_DATA 返回时,会提供保存哈希数据所需的缓冲区大小。 |
|
文件未签名 |
|
根据存储在文件的数字签名中的哈希,文件的当前哈希无效。 |
|
文件的签名者证书已被吊销。 文件的数字签名已泄露。 |
|
使用者未通过指定的验证操作。 大多数信任提供程序返回更详细的错误代码,用于描述失败的原因。 |
|
此系统上无法识别信任提供程序。 |
|
信任提供程序不支持指定的操作。 |
|
信任提供程序不支持为主题指定的表单。 |
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 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 运行时要求。 |
目标平台 | Windows |
标头 | msi.h |
Library | Msi.lib |
DLL | Msi.dll |