Почему 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 до и после подключения к Интернету.

Другие вопросы по тегам