27.09.2006 21:58:23Ошибка 0x103 при вызове CryptGetProvParam Ответов: 2
Артем Боженов
Добрый день!
Мы сейчас занимаемся плавной миграцией со 2й версии CSP на 3ю, и возникла следующая проблема:
если в системе не установлено ни одного считывателя, то

CryptGetProvParam(hCryptProvCP, PP_ENUMCONTAINERS, 0, &length, CRYPT_FIRST)

которую мы используем для определения максимальной длины имени контейнера, возвращает false, а GetLastError() дает загадочный код 0x103. Если считыватели есть - всё работает нормально. Во 2й версии оно работало всегда независимо от наличия считываетелей. Не подскажите - это у нас проблема, или такое поведение закономерно? И, соответственно, не поскажете ли, что означает установленный код ошибки и можно ли считать его однозначным признаком отсутствия в системе считывателей?
 
Ответы:
27.09.2006 22:03:45Артем Боженов
Да, полный код такой:

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();
...
}
28.09.2006 11:36:13maxdm
Проблема есть, возникает при отсутствии контейнеров. Ноги растут примерно отсюда: http://www.cryptopro.ru/cryptopro/forum/view.asp?q=2456.
В качестве временной меры могу посоветовать сделать какой-нибудь контейнер в реестре.