MsiGetFileSignatureInformationW 函数 (msi.h)

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

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

Windows Installer 2.0: 不支持修补程序的数字签名。 Windows Installer 2.0 使用数字签名作为检测损坏资源的方法,并且只能验证外部柜的数字签名,并且只能使用 MsiDigitalSignatureMsiDigitalCertificate 表。

语法

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

parameters

[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,则会提供写入哈希缓冲区的字节数。 如果 pbHashDataNULL,则忽略该“印刷”HashData 参数

返回值

含义
ERROR_SUCCESS/S_OK
成功完成。
ERROR_INVALID_PARAMETER
指定的参数无效。
ERROR_FUNCTION_FAILED

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

ERROR_MORE_DATA
缓冲区太小,无法保存请求的数据。 如果返回ERROR_MORE_DATA, 则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_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

另请参阅

数字签名和 Windows Installer

MsiDigitalCertificate 表

MsiDigitalSignature table