05.12.2007 16:29:29Insert key carrier media Keyset does not exist Ответов: 14
LexSTV
Добтый день.
Такая сложность возникла.
Когда устанавливаю личный сертификат через крипторо, то выбрать контейнер с ключами позволяет, а если делаю через код:
if (!CryptGetProvParam (m_hCryptProv, PP_ENUMCONTAINERS, NULL, &szKeyContainerLen, CRYPT_FIRST)) {
CertFreeCertificateContext(pCert);
CryptReleaseContext(m_hCryptProv,0);
THROW_ERR(_T("Ошибка при получении размера имени контейнера секретного ключа"), GetLastError());
}
if (szKeyContainerLen <= 0){
CertFreeCertificateContext(pCert);
CryptReleaseContext(m_hCryptProv,0);
THROW_ERR(_T("Не удалось получить имя контейнера секретного ключа"), GetLastError());
}
szKeyContainer = (LPTSTR)ALLOC(szKeyContainerLen);
if (!CryptGetProvParam (m_hCryptProv, 110, (LPBYTE)szKeyContainer, &szKeyContainerLen, 0)) {
CertFreeCertificateContext(pCert);
FREE(szKeyContainer);
CryptReleaseContext(m_hCryptProv,0);
THROW_ERR(_T("Ошибка при получении имени контейнера секретного ключа"), GetLastError());
}
то выдает окошко выбора считывателей и при выделении диска с контейнерами пишет "Keyset does not exist" но если это все проделываю через интерфейс криптыПРО, то все видит.
P.S. Код рабочий, на другой машине тестил и все было в поряде
 
Ответы:
06.12.2007 17:56:11LexSTV
Очень бы хотелось получить ответ.
06.12.2007 17:56:12LexSTV
Очень бы хотелось получить ответ.
07.12.2007 18:45:25LexSTV
Если не будете отвечать, то напишите тут об этом пожалуйста, чтоб я не висел на форуме в ожидании ответа
08.12.2007 3:45:23maxdm
Собственно, а зачем этот код? Может поможет PP_SELECT_CONTAINER?
10.12.2007 9:41:05LexSTV
PP_SELECT_CONTAINER у Вас определен как 110, так что разницы не какой вообще...
10.12.2007 10:05:42maxdm
Экспортируйте и удалите ветку HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\SID\KeyDevices\passwords,
10.12.2007 11:04:13LexSTV
я включил просмотрщика дебажных сообщений, и вот, что выбрасывала криптопро при поиске контейнера, думаю это должно помочь
[4036] cpcspi:!0xff4:!:1650!read_keyset_by_rdr!search_container fail 300a!0x0(0)!
[4036] cpcspi:!0xfc8:!:1079!read_keyset!rdr_wnd_choice_carrier fail!0x8010006e(-2146434962)!
[4036] cpcspi:!0xfc8:!:650!key_carrier_open1of! carrier_open fail!0x8010006e(-2146434962)!
[4036] cpcspi:!0xfc8:!:572!OpenContainer!OpenContainer key_carrier_open fail (0x8010006e)!0x8010006e(-2146434962)!

еще хотелось уточнить, что у меня виртуал флоппи стоит, но думаю - это не принципиально, ибо у меня на компе все работает с такими же условиями...
10.12.2007 11:12:37LexSTV
удар в бубен веткой реестра не помог :-(
10.12.2007 11:48:31maxdm
Попробуйте поудалять считыватели.
10.12.2007 11:56:15LexSTV
все это проделывал несколько раз и удалял и устанавливал...
А можно услышать решение более направленное, а не в стиле " перезагрузите компьютер", "потрите мышку"?
По-моему по дебажным сообщениям видно в чем проблема. Очень вас прошу.
10.12.2007 11:59:42LexSTV
Обосную свою настойчивость тем, что я делаю инсталляцию, которую будут делать бабушки во всех субъектах РФ и им сложно включать криптоПРО и устанавливать сертификат там. А если я им буду говорить, чтоб они ветку в реестре чистили, или считыватели перезалили - можете представить, какая будет реакция...
11.12.2007 9:45:48LexSTV
еще обнаружилась зависимость:
Если на компе стоит вижуал студия, то код работает, ежели ее на компе нет, то Ваше окно с ключами не выбрасывается :-(
11.12.2007 9:45:49LexSTV
еще обнаружилась зависимость:
Если на компе стоит вижуал студия, то код работает, ежели ее на компе нет, то Ваше окно с ключами не выбрасывается :-(
11.12.2007 11:52:08LexSTV
неужели за всю неделю мне так никто и не даст вразумительного ответа?