MSDN记录WinVerifyTrust()
和WinVerifyTrustEx()
函数,并不清楚它们之间的区别是什么。
除最后一个参数外,函数签名是相同的:
LONG WINAPI WinVerifyTrust(
_In_ HWND hWnd,
_In_ GUID *pgActionID,
_In_ LPVOID pWVTData
);
HRESULT WinVerifyTrustEx(
_In_ HWND hwnd,
_In_ GUID *pgActionID,
_In_ WINTRUST_DATA *pWinTrustData
);
然而,LPVOID pWVTData
的{{1}}参数实际上是WinVerifyTrust()
,就像WINTRUST_DATA*
一样:
pWVTData [in]
一种指针,当转换为WINTRUST_DATA结构时,包含信任提供者处理指定操作标识符所需的信息。
我将两个文档页面分开以寻找其他任何差异,这就是我发现的,省略了微不足道的差异:
WinVerifyTrustEx()
:
如果信任提供程序未验证主题是否受信任指定的操作,则该函数将从信任提供程序返回状态代码。 注意返回值是LONG,而不是之前记录的HRESULT。不要使用诸如SUCCEEDED之类的HRESULT宏来确定函数是否成功。相反,请检查返回值是否为零。
说明
WinVerifyTrust函数使应用程序能够调用信任提供程序来验证指定的对象是否满足指定的验证操作的条件。 pgActionID参数标识验证操作,pWinTrustData参数标识要验证其信任的对象。信任提供程序是在操作系统中注册的DLL。对WinVerifyTrust的调用会将该调用转发给已注册的信任提供程序(如果有),该信任提供程序支持该指定的操作标识符。
例如,软件发布者信任提供程序可以验证可执行映像文件是否来自可信软件发布者,并且该文件自发布以来未被修改。在这种情况下,pWinTrustData参数指定文件的名称和文件类型,例如Microsoft Portable Executable图像文件。
每个信任提供程序都支持可以评估的一组特定操作。每个操作都有一个标识它的GUID。信任提供程序可以支持任意数量的操作标识符,但是两个信任提供程序不能支持相同的操作标识符 有关演示如何使用此函数验证可移植可执行(PE)文件的签名的示例,请参阅Example C Program: Verifying the Signature of a PE File。
WinVerifyTrust()
:
此功能没有关联的导入库。您必须使用LoadLibrary和GetProcAddress函数动态链接到Wintrust.dll。
WINTRUST_ACTION_GENERIC_CERT_VERIFY
仅验证证书链。这仅在传递WinVerifyTrust输入结构中的证书上下文时有效 注意:我们不建议使用此功能执行证书验证。要执行证书验证,请使用CertGetCertificateChain和CertVerifyCertificateChainPolicy函数。如果信任提供程序验证主题是否受信任指定的操作,则返回值为ERROR_SUCCESS。否则,该函数将从信任提供程序返回状态代码。
作为测试,我参加了为WinVerifyTrustEx()
列出的示例程序,并将其更改为使用WinVerifyTrust()
。它通过API调用提供相同的结果。
如果有人熟悉这两个功能并知道它们之间的真正不同之处,那么任何见解都将受到赞赏!