Статус: Участник
Группы: Участники
Зарегистрирован: 22.06.2012(UTC) Сообщений: 13
|
Подскажите, как можно проверить существование ruToken-а в считывателе. С помощью Crypto API удалось получить список доступных считывателей, но нужно явно проверить наличие ruToken-а ?
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.06.2012(UTC) Сообщений: 13
|
Придумал, след. реализацию: 1. с помощью P/Invoke получаю список доступных ридеров и контейнеров, далее отбираю ридеры, в кот. нет ни одного контейнера, следовательно они потенциально м.б. пустыми 2. пытаюсь обратиться к контенейру (с произвольным имененем VirtualContainer): string containerName = @"\\.\" + readerName + @"\VirtualContainer"; CspParameters cspParameters = new CspParameters(75) { KeyPassword = GetSecureString("12345678"), KeyContainerName = containerName, Flags = CspProviderFlags.NoPrompt|CspProviderFlags.UseExistingKey }; provider = GetServiceProvider(cspParameters); В случае отсутствия руТокена вываливается эксепшен "Смарт-карта извлечена", если руТокен присутствует - эксепшен "Не обнаружены ключи". Таким образом, получается отфильтровать ридеры по наличию в них вставленных руТокенов.
Как можно решить эту задачу более элегантно? Насколько я понял, есть возможность использовать CSP самого руТокена и соответственно перечисления физических контейнеров, но вызов функции CryptAcquireContext("Aktiv Rutoken CSP v1.0",...) дает ошибку...
|
|
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 141  Откуда: Крипто-Про Поблагодарили: 16 раз в 15 постах
|
Добрый день, При перечислении ридеров через CryptGetProvParam(..PP_ENUMREADERS...) можно указать флаг 32, тогда для каждого считывателя дополнительно будет проверяться наличие карточки в нем.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.06.2012(UTC) Сообщений: 13
|
Попробовал PP_ENUMREADERS | 32 - тоже самое, и отдельно 32 - вернул ноль считывателей. В чем м.б. проблема ?
|
|
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 141  Откуда: Крипто-Про Поблагодарили: 16 раз в 15 постах
|
PP_ENUMREADERS - параметр 32 - значение флага. CryptGetProvParam(hProv, PP_ENUMREADERS, pbData, pdwDataLen, 32);
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.06.2012(UTC) Сообщений: 13
|
Спасибо за замечание, но все-равно не пашет (использую след. код для обхода считывателей на C#, dwFlags = KeyPal.CRYPT_FIRST | 32, enumFalgs = PP_ENUMREADERS): StringBuilder sb = null; Win32.CryptGetProvParam(hProv, enumflags, sb, ref pcbData, dwFlags); BUFFSIZE = (int)(2 * pcbData); sb = new StringBuilder(BUFFSIZE);
/* ---------- Get KeyContainer Names ------------- */ dwFlags = iterFlags; //CRYPT_FIRST; //required initalization while (Win32.CryptGetProvParam(hProv, enumflags, sb, ref pcbData, dwFlags)) { dwFlags = 0; //required to continue entire enumeration containernames.Add(sb.ToString()); }
|
|
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 141  Откуда: Крипто-Про Поблагодарили: 16 раз в 15 постах
|
А что за ошибку получаете ? Признак завершения операции, "ошибка" ERROR_NO_MORE_ITEMS Внутри цикла нужно снять только флаг CRYPT_FIRST, 32 нужно оставить.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2011(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 5 раз
|
Здравствуйте, у меня близкий к данной теме вопрос. Какие флаги (Flags) можно получить в CRYPT_ENUMREADER_INFO_MEDIA при PP_ENUMREADERS и что они означают? Это не описано в http://cpdn.cryptopro.ru...i_n_f_o___m_e_d_i_a.html и WinCryptEx.h, на форуме тоже не нашел. Вообще, задача разделять usb токены (рутокен, етокен, ...) и смарткарты от обычных флеш накопителей. Не хотелось бы это делать по szMedia или szName.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
Флаги из модуля считывателя RDR_FLAG_BLOCK_RDR. У pcsc такие: Код:static const unsigned char PCSC_RDR_FLAGS[] =
{
0 << 7 /* RDR_FLAG_RDR_LONG_NAMES */
| 1 << 6 /* RDR_FLAG_RDR_REMOVABLE */
| 1 << 5 /* RDR_FLAG_RDR_UNIQUE */
| 1 << 4 /* RDR_FLAG_RDR_FOLDERS */
| 0 << 3, /* RDR_FLAG_RDR_FOLDER_ROOT */
};
у fat12: Код:static const unsigned char FAT12_FLAGS_RDR[] =
{
0 << 7 /* RDR_FLAG_RDR_LONG_NAMES */
| 1 << 6 /* RDR_FLAG_RDR_REMOVABLE */
#ifdef UNIX
| 0 << 5 /* RDR_FLAG_RDR_UNIQUE */
#else /* UNIX */
| 1 << 5 /* RDR_FLAG_RDR_UNIQUE */
#endif /* UNIX */
| 1 << 4 /* RDR_FLAG_RDR_FOLDERS */
| 1 << 3, /* RDR_FLAG_RDR_FOLDER_ROOT */
};
Можно различать по последнему флагу. |
|
 2 пользователей поблагодарили Максим Коллегин за этот пост.
|
Андрей * оставлено 10.09.2014(UTC), Ахат оставлено 11.09.2014(UTC)
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2011(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 5 раз
|
На имеющихся рутокенах и етокенах получаю Flags=0x72. Что означает флаг "1 << 1"? Не ФКН ли устройство?
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close