Я использую API-интерфейсы MS CAPI для использования USB-токена для цифровой подписи.
используя CryptAcquireContext, я могу распечатать имена всех доступных CSP, но как узнать, какой CSP связан с подключенным токеном USB?
Кроме того, что если в компьютер подключено несколько токенов?
Как приложение должно выбрать CSP?
В CAPI Windows нет связи между смарт-картой или токеном и поставщиком криптографии. Более того, один и тот же токен может поддерживаться несколькими провайдерами.
Разработчикам смарт-карт и токенов рекомендуется внедрять «мини-драйвер смарт-карт» для «базового провайдера шифрования смарт-карт Microsoft». Но это не обязательно.
UPD:
Если к ПК подключено несколько токенов, вам нужно вручную установить свойство «считыватель смарт-карт» для провайдера. Список доступных читателей можно получить с помощью функции SCardListReaders.
Кроме того, некоторые провайдеры могут смешивать ключи от всех считывателей в одном пуле.
Других решений пока нет …