WinVerifyTrust 函数 (wintrust.h)

WinVerifyTrust 函数对指定对象执行信任验证操作。 函数将查询传递给支持操作标识符 的信任提供程序 (如果存在)。

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

语法

LONG WinVerifyTrust(
  [in] HWND   hwnd,
  [in] GUID   *pgActionID,
  [in] LPVOID pWVTData
);

参数

[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_CHAIN_VERIFY
验证从任何对象类型创建的证书链。 通过为每个签名者和计数器签名者使用链上下文来提供回调来实现最终的链策略。
WINTRUST_ACTION_GENERIC_VERIFY_V2
使用 Authenticode 策略提供程序验证文件或对象。
WINTRUST_ACTION_TRUSTPROVIDER_TEST
调用 Authenticode 策略提供程序后 ,将CRYPT_PROVIDER_DATA 结构写入文件。

[in] pWVTData

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

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

返回值

如果信任提供程序验证该使用者是否信任指定操作,则返回值为零。 除零以外的其他值不应被视为成功返回。

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

注意 返回值为 LONG,而不是如前所述 HRESULT 。 请勿使用 HRESULT 宏(如 SUCCEEDED )来确定函数是否成功。 相反,检查等于零的返回值。

 

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

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

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

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

注解

WinVerifyTrust 函数使应用程序能够调用信任提供程序,以验证指定的对象是否满足指定验证操作的条件。 pgActionID 参数标识验证操作,pWinTrustData 参数标识要验证其信任的对象。 信任提供程序是向操作系统注册的 DLL。 调用 WinVerifyTrust 会转发对支持指定操作标识符的已注册信任提供程序(如果有)的调用。

例如,软件发布者信任提供程序可以验证可执行映像文件是否来自受信任的软件发布者,并且该文件自发布以来尚未修改。 在这种情况下, pWinTrustData 参数指定文件名和文件类型,例如 Microsoft 可移植可执行文件 映像文件。

每个信任提供程序都支持一组可以评估的特定操作。 每个操作都有一个用于标识它的 GUID。 信任提供程序可以支持任意数量的操作标识符,但两个信任提供程序不能支持相同的操作标识符。

有关演示如何使用此函数验证可移植可执行文件 (PE) 文件的签名的示例,请参阅 示例 C 程序:验证 PE 文件的签名

要求

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