2014-09-24 11 views
-2

Я играл с CryptoAPI, и все было в порядке.Ошибка функции CryptGetUserKey без ошибок

Я импортировал .PFX в магазин сертификатов, получил контекст, получил CSP ручку. Каждая функция, которую я использовал, проверял ошибки с помощью функции GetLastError. Но когда я позвонил CryptGetUserKey с тремя аргументами, которые являются hCryptProv, dwKeySpec и указателем на UserKey, у меня есть ошибка, но GetLastError call не показывал мне ничего, кроме случайного значения, такого как 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 навсегда. Мне потребовалось пять секунд, чтобы запустить Calc.exe и преобразовать его в шестнадцатеричный: 8009000D, который выглядит как абсолютно допустимая ошибка HRESULT.


Давайте некоторое время, чтобы проанализировать его немного больше:

  • 8 ошибка.
  • 9 не 7, то есть это не обычная ошибка Win32. Поиск в заголовках Visual C++ говорит мне, что 9 - FACILITY_SSPI.
  • Если я ищу 8009000D в заголовках Visual C++, я получаю эту строку: #define NTE_NO_KEY _HRESULT_TYPEDEF_(0x8009000DL) Там, у вас есть, это ваша ошибка: NTE_NO_KEY.
  • MSDN - rather unhelpful, но Google показывает некоторые другие вопросы о ошибке NTE_NO_KEY, например this.