WinVerifyTrust возвращает CERT_E_UNTRUSTEDROOT для действительного (загруженного) драйвера

В следующем фрагменте кода WinVerifyTrust возвращает CERT_E_UNTRUSTEDROOT для файла драйвера ядра (.sys), который загружен и работает в системе:

   GUID guidAction = DRIVER_ACTION_VERIFY;
   WINTRUST_FILE_INFO sWintrustFileInfo = { 0 };
   WINTRUST_DATA      sWintrustData = { 0 };
   HRESULT            hr = 0;

   sWintrustFileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO);
   sWintrustFileInfo.pcwszFilePath = argv[1];
   sWintrustFileInfo.hFile = NULL;

   sWintrustData.cbStruct            = sizeof(WINTRUST_DATA);
   sWintrustData.dwUIChoice          = WTD_UI_NONE;
   sWintrustData.fdwRevocationChecks = WTD_REVOKE_NONE;
   sWintrustData.dwUnionChoice       = WTD_CHOICE_FILE;
   sWintrustData.pFile               = &sWintrustFileInfo;
   sWintrustData.dwStateAction       = WTD_STATEACTION_VERIFY;

   hr = WinVerifyTrust((HWND)INVALID_HANDLE_VALUE, &guidAction, &sWintrustData);

Несколько интересных моментов: - Драйвер подписан действительным (приобретенным) сертификатом с использованием SHA-256. - KB3033929 установлен в системе (Win7/32). - При просмотре сертификата из свойств файла вся цепочка сертификации отображается как действительная.

Я неправильно называю WinVerifyTrust?

Альтернативный вопрос: есть ли другой способ узнать (при наличии ключа реестра или чего-то подобного), что в целевой системе доступна проверка подписи кода на основе SHA-256? (Мне нужно проверить это во время установки...)

Спасибо:)

1 ответ

DRIVER_ACTION works good for WHQL afaik. Try
GUID WINTRUST_ACTION_GENERIC_VERIFY_V2

Вот еще кое-что, что вы можете сослаться на http://gnomicbits.blogspot.in/2016/03/how-to-verify-pe-digital-signature.html

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