vl2019 Опубликовано 16 Октября 2015 Жалоба Поделиться Опубликовано 16 Октября 2015 VipNet CSP 4.2 для Linux.С помощью функции CryptGetProvParam пытаюсь получить список установленных контейнеров.Но она ничего не находит, хотя в систему с помощью certmgr-gui были импортированы 2 контейнера.В CryptAcquireContext пробовал добавлять флаг CRYPT_MACHINE_KEYSET.Ошибок тоже никаких не выходит. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
BRV Опубликовано 16 Октября 2015 Жалоба Поделиться Опубликовано 16 Октября 2015 Добрый день!Можете уточнить, где расположены контейнеры? Наши стандартные каталоги: ~/.itcs/vipnet-csp/containers или /var/opt/itcs/vipnet-csp/containersЕсли искомые контейнеры находятся в других местах, то найти их не удастся. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vl2019 Опубликовано 16 Октября 2015 Автор Жалоба Поделиться Опубликовано 16 Октября 2015 Переместил в /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; } } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
kbs Опубликовано 20 Октября 2015 Жалоба Поделиться Опубликовано 20 Октября 2015 Утро доброе!Есть небольшая ошибка в коде. Внимательно прочитайте описание функции 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; } } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vl2019 Опубликовано 27 Октября 2015 Автор Жалоба Поделиться Опубликовано 27 Октября 2015 Все работает, спасибо. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.