为什么WinVerifyTrust()仅在未连接到Internet的计算机上失败?

时间:2016-07-12 15:12:41

标签: c# winverifytrust

我想检查我正在使用C#的项目中的.exe文件之一的信任。

我已提及 - http://pinvoke.net/default.aspx/wintrust/WinVerifyTrust.html

这是我的代码段。

WinTrustData wtd = new WinTrustData(filename);
Guid guidAction = new Guid(WINTRUST_ACTION_GENERIC_VERIFY_V2);
WinVerifyTrustResult result = WinVerifyTrust(INVALID_HANDLE_VALUE, guidAction, wtd);
bool valid = (result == WinVerifyTrustResult.Success);

filename - 只是.exe文件路径。

上面代码中提到的 WinVerifyTrust()返回" WinVerifyTrustResult.Success"只有当机器连接到互联网至少一次。

然而,在新机器上,它返回" 0x800b0100" ie-" Trust_e_nosignature"。

这是预期的行为吗?如果是,那么如何解决?

我搜索了这个特定的行为,但没有找到任何满意的答案。

1 个答案:

答案 0 :(得分:2)

Windows(7+)附带一组非常有限的根证书。

这些是按需下载的。这可能是为什么如果计算机之前从未连接到互联网就无法验证authenticode签名的原因(但是,我认为仅仅连接到互联网是不够的,但有些冲浪到https页面或验证authenticode签名是必要的,以便下载“正确”的根证书。)

您可以通过在连接到互联网之前和之后检查/计算Internet Explorer中安装的ca证书来验证这一点。