2014-09-24 62 views
-2

我一直在玩CryptoAPI,一切都很好。CryptGetUserKey函数失败,没有错误

我已经导入.PFX到证书库,得到了上下文,得到了CSP句柄。我一直在使用的每个功能我都检查了GetLastError函数的错误。但当我打电话CryptGetUserKey与三个参数是hCryptProv,dwKeySpec和指针UserKey,我得到了一个错误,但GetLastError调用并没有显示任何东西,但像2148073485这样的随机值,这意味着什么,我想。

如何找出哪里出了问题?

操作系统 - Windows 7 32b HP;

编程语言 - C++;

IDE - MSVS2013 Ultimate。

回答

1

GetLastError call didn't show me anything but a random value like 2148073485 that means nothing I suppose.

永远失败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