04.10.2007 15:18:14Дружественное имя Ответов: 7
Ярослав
Уважаемые коллеги!! Помогите мне. Мне необходимо получить дружественное имя контейнера, а не уникальное.
 
Ответы:
04.10.2007 17:52:33Kirill Sobolev
Используйте PP_CONTAINER вместо PP_UNIQUE_CONTAINER.
04.10.2007 21:49:04ярослав
спасибо вам большое. завтра попробую.
05.10.2007 12:55:34Ярослав
Нет. Не хочет он выдавать дружественое имя. ВАыдаёт всё теже уникальные имена.
05.10.2007 13:37:57Kirill Sobolev
А какой провайдер?
05.10.2007 14:31:48Ярослав
PROV_GOST_2001_DH
06.10.2007 15:11:01Василий
Приведите, пожалуйста, кусок кода (функции и их параметры).
10.10.2007 17:12:12ярослав
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;