Я работаю с SmartCard API с C ++ (Windows API) и Java также.
У меня проблема с получением ATR после удаления ОС.
Мое приложение сделано для удаления ОС со SmartCard. При удалении ОС ATR карты меняется, но это не отражается в моем коде. После удаления ОС я по-прежнему получаю тот же ATR, но при перезапуске приложения отображается правильный ATR.
Фрагменты моего кода.
CardConnect();
getATR(); //get correct ATR
eraseOS(deleteOScmd,size); //Erasing OS
CardConnect(); //again connecting
getATR(); // againg try to get ATR but shows same as first call.
То же самое происходит и с Java-кодом. Я хочу показать новый ATR, но не могу получить обновленный ATR.
Кто-нибудь может мне помочь?
Благодарю.
Удаляя ОС, вы настолько далеко от стандартного использования смарт-карт, что любое объяснение возможно. Считыватель, драйвер устройства чтения смарт-карт, менеджер ресурсов или кто-либо еще может полагаться на тот факт, что в случае, если новая смарт-карта не была вставлена, старый ATR все еще действует и просто предоставляет кэшированную копию предыдущих данных. (Обратите внимание, что все, кроме исторических байтов из ATR, связаны с обменом данными между картой и считывателем, и нет никаких причин для изменения). В реальной жизни довольно опасно допускать что-либо подобное стиранию ОС.
Я подозреваю, что вы добавляете значение к ATR, которое лучше поместить в объект пользовательских данных.