Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.0
»
Ошибка инициализации приложения (CPAquireContext)
Статус: Участник
Группы: Участники
Зарегистрирован: 06.05.2009(UTC) Сообщений: 28 Откуда: Москва
|
Здравствуйте. Столкнулся с такой проблемой: пытаюсь использовать CryptoPro SDK (как описано к документации к нему) путем написания следующего кода:
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.05.2009(UTC) Сообщений: 28 Откуда: Москва
|
Код вставляться текстом не захотел поэтому картинкой.  При запуске выдает ошибку "Ошибка инициализации приложения (0хс0000005)". Для выхода нажмите "ОК". " Если закоментирвоать вызов функции, то компилируется и выполняется без ошибок - значит проблема в самом вызове. Может быть кто знает в чем проблема. ОС WinXP + MediaKit + SP3 Заранее спасибо за помощь.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,405  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 720 раз в 624 постах
|
PVTableProvStruc должна быть заполнена. А зачем Вам уровень CP? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.05.2009(UTC) Сообщений: 28 Откуда: Москва
|
В SDK описана именно эта функция, ее и решил использовать. Хотя CryptAquireContext работает без проблем. Но там непонятно как получить контекст не зная имени контейнера если указать только Reader по маске \\.\Reader то контейнер не находится. Физически располагается на eToken.
Получилось получить ссылку на контейнер только задав полный путь - MEDIA\UNIQUE или \\.\Reader\MEDIA\UNIQUE. Но ведь такой вариант не универсален, необходимо получать ключи с любого вставленного eToken.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,405  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 720 раз в 624 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.05.2009(UTC) Сообщений: 28 Откуда: Москва
|
Спасибо За помощь. Сделал так: Код:
//имя криптопровайдера в системе
wchar_t cspName[] = L"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider";
DWORD providerType = 75;
//выводит сообщение об ошибке
void HandleError(char *s);
//возвращает инициализированный контекст криптопровайдера с первым контейнером ключей
HCRYPTPROV getCspHandle(void);
/* char to wchar_t */
wchar_t* ctow(const char* c, size_t max);
int main(void) {
}
HCRYPTPROV getCspHandle(void) {
HCRYPTPROV cspHandle;
BYTE byteFirstContainerName[1000];
DWORD firstContainerNameDataLength = 1000;
wchar_t* firstContainerName;
//инициализируем контекст, без контейнера для того чтобы получить список контейнеров
if(!CryptAcquireContext(&cspHandle, NULL, cspName, providerType, CRYPT_VERIFYCONTEXT)) {
HandleError("CryptAcquireContext");
}
//получим первйы контейнер из списка
CryptGetProvParam(cspHandle, PP_ENUMCONTAINERS, byteFirstContainerName, &firstContainerNameDataLength, CRYPT_FIRST);
//преобразуем в юникод
firstContainerName = ctow((char*)byteFirstContainerName, firstContainerNameDataLength);
//освободим контекст за ненадобностью
CryptReleaseContext(cspHandle, 0);
//инициализируем новый контекст - на этот раз с известным контейнером
if(CryptAcquireContext(&cspHandle, firstContainerName, cspName, providerType, 0)) {
printf("CryptAcquireContext succeeded.\n");
} else {
HandleError("A genral error runing CryptAcquireContext.");
}
return cspHandle;
}
wchar_t* ctow(const char* c, size_t max) {
wchar_t* w = new wchar_t[max];
mbstowcs(w,c,max);
return w;
}
void HandleError(char *s) {
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x.\n",GetLastError());
printf("Program terminating.\n");
char k;
std::cin >> k;
exit(1);
}
Отредактировано пользователем 8 мая 2009 г. 15:15:12(UTC)
| Причина: Не указана
|
|
|
|
Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.0
»
Ошибка инициализации приложения (CPAquireContext)
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close