CryptGetUserKey函数失败,没有错误

时间:2014-09-24 06:30:55

标签: winapi visual-c++ cryptoapi

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

我已将.PFX导入证书存储区,获得了上下文,得到了CSP句柄。我一直在使用的每项功能都使用GetLastError功能检查了错误。但是,当我使用CryptGetUserKeyhCryptProv和指向dwKeySpec的三个参数调用UserKey时,我收到了错误,但GetLastError调用了2148073485除了像{{1}}这样的随机值之外我没有给我看任何东西,这意味着什么都没有。

我怎样才能找出问题所在?

操作系统 - Windows 7 32b HP;

编程语言 - C ++;

IDE - MSVS2013 Ultimate。

1 个答案:

答案 0 :(得分:1)

  

GetLastError调用没有向我显示除了2148073485之类的随机值,这意味着我没想到。

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


让我们花一些时间来分析一下:

  • 8是ERROR。
  • 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