05.10.2006 15:56:28Как получить ссылку на криптопровайдера по имени контейнера? Ответов: 4
Виктор
Я знаю имя контейнера на смарткарте (посмотрел утилитой). Как получить ссылку на криптопровайдера функцией CryptAcquireContext(hProv, contName, nil, PROV_RSA_FULL, fFlag)? Какой поставить fFlag?
CRYPT_VERIFYCONTEXT - нельзя, т.к. явно задан контейнер
CRYPT_NEWKEYSET - ошибка, уже есть такой
CRYPT_MACHINE_KEYSET - ошибка = NTE_BAD_KEYSET
CRYPT_DELETEKEYSET - вроде не стоит
CRYPT_SILENT - не получается, т.к. последующий вызов функции CryptGetUserKey(hProv, AT_KEYEXCHANGE, key) говорит 'NTE_NO_KEY', хотя ключевая пара там точно есть.
Что делать?
Начальные установки: WinXP, CSP 2.0 (2100), OmniKey.
 
Ответы:
06.10.2006 8:47:01support
0 пробовали?

// dwFlags definitions for CryptAcquireContext
#define CRYPT_VERIFYCONTEXT 0xF0000000
#define CRYPT_NEWKEYSET 0x00000008
#define CRYPT_DELETEKEYSET 0x00000010
#define CRYPT_MACHINE_KEYSET 0x00000020
#define CRYPT_SILENT 0x00000040
06.10.2006 8:58:01Виктор
Не понял, что попробовать?
Да, есть такие константы.
06.10.2006 9:43:05maxdm
0 == ноль == ZERO
06.10.2006 10:08:29Виктор
Если поставить fFlag=0, то последующий вызов функции CryptGetUserKey(hProv, AT_KEYEXCHANGE, key) говорит 'NTE_NO_KEY', хотя ключевая пара там точно есть.
Я про ключевую пару так утверждаю, т.к. с помощью неявного определения провайдера через контекст (CryptAcquireCertificatePrivateKey) все работает (ну почти все :)), а мне надо бы через явное определение (т.к. решается задача http://www.cryptopro.ru/cryptopro/forum/view.asp?q=3315)