我正在使用带有C ++(Windows API)和Java的SmartCard API。
删除操作系统后,我遇到了获取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 Code也是如此。我想显示新的ATR,但无法更新ATR。
任何人都可以帮助我吗? 感谢。
答案 0 :(得分:1)
通过删除操作系统,您远离任何标准使用智能卡,任何解释都是可能的。读卡器,智能卡读卡器驱动程序,资源管理器或任何其他人可以依赖这样的事实,即如果没有插入新的智能卡,旧的ATR仍然有效并且只是提供先前数据的缓存副本。 (请注意,除了来自ATR的历史字节之外的所有字符都与卡和读卡器之间的通信相关联,并且没有理由进行更改)。在现实生活中,允许擦除操作系统等任何事情都是非常危险的。
我怀疑,您附加了ATR的含义,最好放在用户数据对象中。