WinVerifyTrustEx 函数 (wintrust.h)

WinVerifyTrustEx 函数对指定对象执行信任验证操作,并获取指向WINTRUST_DATA结构的指针。 函数将查询传递给支持操作标识符 的信任提供程序(如果存在)。

对于证书验证,请使用 CertGetCertificateChainCertVerifyCertificateChainPolicy 函数。

语法

long WinVerifyTrustEx(
  [in] HWND          hwnd,
  [in] GUID          *pgActionID,
  [in] WINTRUST_DATA *pWinTrustData
);

参数

[in] hwnd

调用方窗口的可选句柄。 信任提供程序可以使用此值来确定它是否可以与用户交互。 但是,信任提供程序通常无需用户输入即可执行验证操作。

此参数的取值可为下列值之一:

含义
INVALID_HANDLE_VALUE
没有交互式用户。 信任提供程序执行验证操作,而无需用户的帮助。
Zero
信任提供程序可以使用交互式桌面来显示其用户界面。
有效的窗口句柄
信任提供程序可以将除 INVALID_HANDLE_VALUE 或零以外的任何值视为可用于与用户交互的有效窗口句柄。

[in] pgActionID

指向 GUID 结构的指针,该结构标识操作和支持该操作 的信任提供程序 。 此值指示要对 pWinTrustData 指向的结构执行的验证操作的类型。

WinTrust 服务旨在与由第三方实现的信任提供程序配合使用。 每个信任提供程序都提供其自己唯一的操作标识符集。 有关信任提供程序支持的操作标识符的信息,请参阅该信任提供程序的文档。

例如,Microsoft 提供了一个软件发布者信任提供程序,该提供程序可以建立从 Internet 或其他一些公共网络下载的软件的可信度。 软件发布者信任提供程序支持以下操作标识符。 这些常量在 Softpub.h 中定义。

含义
DRIVER_ACTION_VERIFY
(WHQL) 签名的驱动程序验证 Windows 硬件质量实验室的真实性。 这是 Authenticode 加载项策略提供程序。
HTTPSPROV_ACTION
通过 Internet Explorer 验证 SSL/TLS 连接。
OFFICESIGN_ACTION_VERIFY
不支持此操作 ID。 使用 Microsoft Office Authenticode 附加策略提供程序验证结构化存储文件的真实性。

Windows Server 2003 和 Windows XP: 支持此操作 ID。

WINTRUST_ACTION_GENERIC_CERT_VERIFY
仅验证证书链。 仅当在 WinVerifyTrust 输入结构中传入证书上下文时,这才有效。
注意 不建议使用此函数执行证书验证。 若要执行证书验证,请使用 CertGetCertificateChainCertVerifyCertificateChainPolicy 函数。
 
WINTRUST_ACTION_GENERIC_CHAIN_VERIFY
验证从任何对象类型创建的证书链。 通过为每个签名者和计数器签名者使用链上下文来提供回调来实现最终的链策略。
WINTRUST_ACTION_GENERIC_VERIFY_V2
使用 Authenticode 策略提供程序验证文件或对象。
WINTRUST_ACTION_TRUSTPROVIDER_TEST
调用 Authenticode 策略提供程序后 ,将CRYPT_PROVIDER_DATA 结构写入文件。

[in] pWinTrustData

指向 WINTRUST_DATA 结构的指针,该结构包含 信任提供程序 处理指定操作标识符所需的信息。 通常,结构包含标识信任提供程序必须评估的对象的信息。

结构的格式取决于操作标识符。 有关特定操作标识符所需的数据的信息,请参阅支持该操作的信任提供程序的文档。

返回值

请注意,当返回类型声明为 HRESULT 时,此 API 返回 Win32 错误代码,请不要使用 SUCCEEDED () 或 FAILED () 来测试结果。

如果信任提供程序验证使用者是否信任指定操作,则返回值为ERROR_SUCCESS。 否则,函数会从 信任提供程序返回状态代码。

例如,信任提供程序可能指示主体不受信任,或受信任,但存在限制或警告。 返回值可以是单个信任提供程序文档中所述的特定于信任提供程序的值,也可以是以下错误代码之一。

返回代码 说明
TRUST_E_SUBJECT_NOT_TRUSTED
使用者未通过指定的验证操作。 大多数信任提供程序返回更详细的错误代码,用于描述失败的原因。
注意  

根据 HKLM\Software\Microsoft\Cryptography\Wintrust\Config 下的 EnableCertPaddingCheck 注册表项的值,可能会返回TRUST_E_SUBJECT_NOT_TRUSTED返回代码。如果 EnableCertPaddingCheck 设置为“1”,则执行其他检查以验证WIN_CERTIFICATE结构是否不包含无关信息。 检查验证 PKCS #7 结构之外没有非零数据。 2014 年 6 月 10 日, EnableCertPaddingCheck 密钥默认设置为“1”。 有关详细信息,请参阅以下安全公告: http://technet.microsoft.com/security/advisory/2915720#section1

 
TRUST_E_PROVIDER_UNKNOWN
此系统上无法识别信任提供程序。
TRUST_E_ACTION_UNKNOWN
信任提供程序不支持指定的操作。
TRUST_E_SUBJECT_FORM_UNKNOWN
信任提供程序不支持为主题指定的表单。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 wintrust.h
Library Wintrust.lib
DLL Wintrust.dll