【问题标题】:CryptGetUserKey function fails with no errorsCryptGetUserKey 函数失败且没有错误
【发布时间】:2014-09-24 06:30:54
【问题描述】:

我一直在玩CryptoAPI,一切都很好。

我已将 .PFX 导入证书存储区,获得上下文,获得 CSP 句柄。我一直在使用的每个函数都检查了GetLastError 函数的错误。但是当我用三个参数(hCryptProvdwKeySpec 和指向UserKey 的指针)调用CryptGetUserKey 时,我得到了一个错误,但是GetLastError 调用除了像@ 这样的随机值之外没有显示任何内容987654330@ 我想这意味着什么。

如何找出问题所在?

操作系统 - Windows 7 32b HP;

编程语言——C++;

IDE - MSVS2013 Ultimate。

【问题讨论】:

  • 研究使用FormatMessage 函数将GetLastError 错误代码转换为错误消息。这会对你有很大帮助。

标签: winapi visual-c++ cryptoapi


【解决方案1】:

GetLastError 调用只显示了一个随机值,例如 2148073485,我想这意味着什么。

你永远失败了 WINAPI。我花了大约 5 秒钟的时间启动 Calc.exe 并将其转换为十六进制:8009000D,这看起来像是一个完全有效的错误 HRESULT。


让我们花点时间再分析一下:

  • 8 是错误。
  • 9 不是 7,这意味着它不是常规的 Win32 错误。在 Visual C++ 标头中搜索告诉我 9 是 FACILITY_SSPI。
  • 如果我在 Visual C++ 标头中搜索 8009000D,我会得到以下行: #define NTE_NO_KEY _HRESULT_TYPEDEF_(0x8009000DL)那里,你有它,这是你的错误:NTE_NO_KEY。
  • MSDN 是 rather unhelpful,但 Google 显示了一些关于 NTE_NO_KEY 错误的其他问题,例如 this

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多