Перейти к контенту

Cryptgetprovparam Не Возвращает Спискок Контейнеров В Linux


Рекомендуемые сообщения

VipNet CSP 4.2 для Linux.

С помощью функции CryptGetProvParam пытаюсь получить список установленных контейнеров.

Но она ничего не находит, хотя в систему с помощью certmgr-gui были импортированы 2 контейнера.

В CryptAcquireContext пробовал добавлять флаг CRYPT_MACHINE_KEYSET.

Ошибок тоже никаких не выходит.

Ссылка на комментарий
Поделиться на других сайтах

Добрый день!

Можете уточнить, где расположены контейнеры? Наши стандартные каталоги: ~/.itcs/vipnet-csp/containers или /var/opt/itcs/vipnet-csp/containers

Если искомые контейнеры находятся в других местах, то найти их не удастся.

Ссылка на комментарий
Поделиться на других сайтах

Переместил в /var/opt/itcs/vipnet-csp/containers

Видит только один контейнер

Перебор происходит следующим образом:


flag = CRYPT_FIRST | CRYPT_UNIQUE;
while(TRUE) {
if(CryptGetProvParam(hProv, PP_ENUMCONTAINERS, NULL, &buffer_len, flag)){
buffer = (BYTE*)emalloc(buffer_len);
if(!CryptGetProvParam(hProv, PP_ENUMCONTAINERS, buffer, &buffer_len, flag)){
if(ERROR_NO_MORE_ITEMS == GetLastError()) {
break;
} else {

goto cleanup;
break;
}
}
printf("%s",buffer);
flag = CRYPT_NEXT | CRYPT_UNIQUE;
} else {
if(ERROR_NO_MORE_ITEMS != GetLastError()) {

goto cleanup;
}
break;
}
}

Ссылка на комментарий
Поделиться на других сайтах

Утро доброе!

Есть небольшая ошибка в коде. Внимательно прочитайте описание функции CryptGetProvParam в MSDN(https://msdn.microsoft.com/en-us/library/windows/desktop/aa380196%28v=vs.85%29.aspx).

Обратите внимание на следующее замечание:

"If PP_ENUMCONTAINERS is set, the first call to the function returns the size of the maximum key-container allowed by the current provider. This is in contrast to other possible behaviors, like returning the length of the longest existing container, or the length of the current container. Subsequent enumerating calls will not change the dwLen parameter. For each enumerated container, the caller can determine the length of the null-terminated string programmatically, if desired. If one of the enumeration values is read and the pbData parameter is NULL, the CRYPT_FIRST flag must be specified for the size information to be correctly retrieved."

Пример перечисления контейнеров есть в SDK ViPNet CSP Linux, так и называется enum_containers.

Код из него:


DWORD dwMaxContainerLen = 0;
if( CryptGetProvParam( provider, PP_ENUMCONTAINERS, NULL, &dwMaxContainerLen, dwFlags ) )
{
std::vector<char> bufContainer( dwMaxContainerLen + 1, 0 );
while( true )
{
DWORD dwContainerLen = dwMaxContainerLen;

if( !CryptGetProvParam( provider, PP_ENUMCONTAINERS, ( BYTE* ) &bufContainer[0], &dwContainerLen, dwFlags ) )
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
isSuccess = true;
}
break;
}
std::cout << " " << index << ". "<< &bufContainer[0] << std::endl;
memset( &bufContainer[0], 0, bufContainer.size() );
dwFlags = CRYPT_NEXT | CRYPT_UNIQUE;
++index;
}
}
else
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
isSuccess = true;
}
}

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...

Важная информация

Продолжая пользоваться сайтом вы принимаете Условия использования.