Почему WinVerifyTrust() дает сбой только на компьютере, который не подключен к Интернету?
Я хотел проверить доверие к одному из.exe-файлов в нашем проекте, для которого я использую C#.
Я упомянул - 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);
имя файла - это не что иное, как путь к файлу.exe.
WinVerifyTrust (), упомянутый в приведенном выше коде, возвращает "WinVerifyTrustResult.Success", только если машина подключена к Интернету хотя бы один раз.
Однако на новой машине он возвращает "0x800b0100", т.е.- "Trust_e_nosignature".
Это ожидаемое поведение? Если да, то как это решить?
Я искал это специфическое поведение, но не нашел удовлетворительного ответа.
1 ответ
Windows (7+) поставляется с очень ограниченным набором корневых сертификатов.
Те загружаются по требованию. Это может быть причиной того, что подпись authenticode не может быть проверена, если компьютер никогда ранее не был подключен к Интернету (но, тем не менее, я полагаю, что простого подключения к Интернету недостаточно, но некоторые переходят на страницы https или проверяют подпись authenticode необходимо, чтобы "правильный" корневой сертификат был загружен).
Вы можете убедиться в этом, проверив / посчитав сертификаты CA, которые установлены в Internet Explorer до и после подключения к Интернету.