| ||||
| ||||
Добрый день! Мы сейчас занимаемся плавной миграцией со 2й версии CSP на 3ю, и возникла следующая проблема: если в системе не установлено ни одного считывателя, то CryptGetProvParam(hCryptProvCP, PP_ENUMCONTAINERS, 0, &length, CRYPT_FIRST) которую мы используем для определения максимальной длины имени контейнера, возвращает false, а GetLastError() дает загадочный код 0x103. Если считыватели есть - всё работает нормально. Во 2й версии оно работало всегда независимо от наличия считываетелей. Не подскажите - это у нас проблема, или такое поведение закономерно? И, соответственно, не поскажете ли, что означает установленный код ошибки и можно ли считать его однозначным признаком отсутствия в системе считывателей? | ||||
Ответы: | ||||
| ||||
Да, полный код такой: HCRYPTPROV hCryptProvCP; if(!CryptAcquireContext(&hCryptProvCP, "", CP_GR3410_94_PROV, PROV_GOST_94_DH, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { return; } DWORD length = 0; if (!CryptGetProvParam(hCryptProvCP, PP_ENUMCONTAINERS, 0, &length, CRYPT_FIRST)) { int err = GetLastError(); ... } | ||||
| ||||
Проблема есть, возникает при отсутствии контейнеров. Ноги растут примерно отсюда: http://www.cryptopro.ru/cryptopro/forum/view.asp?q=2456. В качестве временной меры могу посоветовать сделать какой-нибудь контейнер в реестре. | ||||