Поиск контейнера закрытого ключа функцией CryptFindCertificateKeyPro
Мы используем MS CryptoAPI. Сертификаты в нашей системе могут распространятся отдельно от закрытых ключей, поэтому необходимо выполнять связывание сертификата и ключевого контейнера. Для этой цели мы используем функцию CryptFindCertificateKeyProvInfo
Проблема следующая. Для сертификата, закрытый ключ которого находится на токене, функция срабатывает корректно, только если токен вставлен до её вызова. Если токен не вставлен - то выдаётся диалог: "вставьте смарт-карту". После этого вставляю токен с ключом. Но токен не воспринимается (см. рис)
Если закрытый ключ в реестре - всё работает. Если в функцию передать флаг CRYPT_FIND_SILENT_KEYSET_FLAG то при вставленном токене работает, если же токен вынут - возвращает false, как и должна.
Но нужно, чтобы если носитель не вставлен, он запрашивался. Не могу понять, почему токен не принимается. Пробовал предварительно переоткрыть контекст сертификата, найдя его в хранилище - результат ещё хуже. Тот же эффект, даже если носитель был вставлен заранее. Попробовал перебирать контейнеры функцией CryptGetProvParam(provider_, PP_ENUMCONTAINERS, NULL, &size, CRYPT_NEXT) - перебираются только доступные, запроса токена не производится.