2014-09-24 89 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