【问题标题】:WinVerifyTrust returns CERT_E_UNTRUSTEDROOT for a valid (loaded) driverWinVerifyTrust 为有效(已加载)驱动程序返回 CERT_E_UNTRUSTEDROOT
【发布时间】:2016-02-04 05:51:21
【问题描述】:

在以下代码 sn-p 中,WinVerifyTrust 为已加载并在系统上运行的内核驱动程序文件 (.sys) 返回 CERT_E_UNTRUSTEDROOT:

   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 的代码签名验证? (我需要在安装过程中验证这一点...)

谢谢:)

【问题讨论】:

    标签: certificate driver windows-kernel winverifytrust


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2013-10-06
      • 2016-01-14
      相关资源
      最近更新 更多