Добрый день.
Не удается создать дескрипторы ключевых контейнеров расположенных на
нескольких носителях.
Если носитель один, то вопросов нет, все хорошо.
Очевидно, проблема возникает при установленом флаге CRYPT_SILENT,
который дает возможность не отображать UI CSP
(окно выбора носителя в нашем случае).
Если флаг выставить в 0x000, дескрипторы для всех контейнеров на всех
доступных считывателях создаются успешно,
при этом на какое то время открывается окно CSP, в котором отображается
перечень всех носителей.
НО!!! Пользователь то при установленом флаге в 0x000 ничего не выбирает
(ему не надо выбирать считыватель, хотя и есть такая возможность),
окно само пропадет через долю секунды, т.е. CSP произведет поиск по всем носителям
автоматом.
А при CRYPT_SILENT такого почему то не происходит.
Как с этим бороться?
Можно, конечно, вызвать CryptAcquireContext() с dwFlags=0 и самомоу
гасить в другом потоке это окно со считывателями, но это ведь костыли.
Оставить постоянные мерцания этого окна со считывателями явно не
вариант, окно попросту не нужно для пользователя (особенно плохо
смотрится, когда идет обращение к десятку ключевых контейнеров).
Подскажите, пожалуйста, как можно решить эту проблему.
1. Вот тут сможем открыть контейнер, но не с любого установленного
носителя//---------------------------------------
// Получим дескриптор контейнера ключейif ( !CryptAcquireContext(
&phProv,
pszContName,
pszCSP,
dwCSP,
CRYPT_SILENT))
throw (ERROR_BAD_ARGUMENTS);2. А вот тут откроется любой контейнер с любого считывателя
(но будет мерцать окошко)//---------------------------------------
// Получим дескриптор контейнера ключейif ( !CryptAcquireContext(
&phProv,
pszContName,
pszCSP,
dwCSP,
0))
// <<<<------------------ вот тут 0 throw (ERROR_BAD_ARGUMENTS);
CSP: KC1 3.0.3300.3
Win: XP sp3
Ключевые ностиели: Дискета + Реестр + ФлешкаОтредактировано пользователем 2 декабря 2009 г. 19:00:48(UTC)
| Причина: Не указана