| ||||
| ||||
Уважаемые коллеги!! Помогите мне. Мне необходимо получить дружественное имя контейнера, а не уникальное. | ||||
Ответы: | ||||
| ||||
Используйте PP_CONTAINER вместо PP_UNIQUE_CONTAINER. | ||||
| ||||
спасибо вам большое. завтра попробую. | ||||
| ||||
Нет. Не хочет он выдавать дружественое имя. ВАыдаёт всё теже уникальные имена. | ||||
| ||||
А какой провайдер? | ||||
| ||||
PROV_GOST_2001_DH | ||||
| ||||
Приведите, пожалуйста, кусок кода (функции и их параметры). | ||||
| ||||
flag := CRYPT_FIRST; Result := true; if AProvType in [PROV_GOST_94_DH, PROV_GOST_2001_DH] then flag := flag or CRYPT_FQCN or CRYPT_UNIQUE; { Получаем дискриптор требуемого криптопровайдера } if CheckCryptoAPICall( CryptAcquireContext( Context, nil, nil, AProvType, CRYPT_VERIFYCONTEXT)) then { Получаем размер соответствующего криптоконтейнера } if CheckCryptoAPICall( CryptGetProvParam( Context, PP_ENUMCONTAINER, nil, cbData, flag ), ERROR_NO_MORE_ITEMS) then begin { Выделяем в памяти соответствующий размер под контейнер } GetMem(pbData, cbData); try { Ищем криптоконтейнеры } while CheckCryptoAPICall( CryptGetProvParam(Context, PP_ENUMCONTAINER, pbData, cbData, flag ), ERROR_NO_MORE_ITEMS) do begin { Криптопровайдер найден. переводим имя криптоконтейнера в Строку } SetString( ProviderName, PChar(pbData), cbData ); { Проверяем, что контейнер находится на дискете } AContainer.Add( trim( ProviderName ) ); flag := 0; if AProvType in [PROV_GOST_94_DH, PROV_GOST_2001_DH] then flag := flag or CRYPT_FQCN or CRYPT_UNIQUE; end; finally FreeMem(pbData); CryptReleaseContext(Context, 0); end; end else Result := false; | ||||