Можно ли в минидрайвере изменить значение hSCardCtx и hScard в PCARD_DATA после вызова CardAcquireContext?

Я работаю над проектом, связанным с мини-драйвером для выполнения операций со смарт-картой.

Я зарегистрировал смарт-карту в реестре с правильной информацией о ATR и мини-драйвере. Теперь я пытаюсь создать пару ключей, используя CNG -> минидрайвер -> смарт-карту.

Для этого я вызвал NcryptOpenStorageProvider из тестового приложения, которое возвращает успех.

Теперь, когда я вызываю NCryptCreatePersistedKey и NCryptFinalizeKey, он не может взаимодействовать со смарт-картой.

В минидрайвере он вызывает CardAuthenticateEX и дает сбой в SCardTransmit, хотя предыдущие команды для поиска пути и поиска объектов, таких как CardGetProperty, CardReadFile, могут взаимодействовать с смарт-карта успешно.


person iOS-Developer84    schedule 28.05.2018    source источник


Ответы (1)


Да, значение полей hSCardCtx или hScard в CARD_DATA может измениться после вызова CardAcquireContext. Поэтому никогда не следует хранить эти дескрипторы для использования в последующих вызовах функций, а каждая функция минидрайвера должна извлекать эти дескрипторы из своего параметра PCARD_DATA. В противном случае возникнут проблемы, подобные описанной вами.

person Mounir IDRASSI    schedule 06.03.2021