代码中未反映智能卡ATR更改 我使用智能卡API,同时使用C++(Windows API)和java。

代码中未反映智能卡ATR更改 我使用智能卡API,同时使用C++(Windows API)和java。,java,c++,smartcard,Java,C++,Smartcard,我在删除操作系统后获取ATR时遇到问题。 我的应用程序是从智能卡中删除操作系统。当操作系统被删除时,卡的ATR被更改,但它没有反映在我的代码中。删除操作系统后,我仍然会得到相同的ATR,但当我重新启动应用程序时,它会显示正确的ATR 我的代码片段 CardConnect(); getATR(); //get correct ATR eraseOS(deleteOScmd,size); //Erasing OS CardConnect(); //again connecting getATR()

我在删除操作系统后获取ATR时遇到问题。 我的应用程序是从智能卡中删除操作系统。当操作系统被删除时,卡的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附加了一个含义,最好将其放在用户数据对象中。

操作系统在本文中的含义是什么,我无法想象它是卡的操作系统。@尼尔我假设它是操作系统(默认应用程序或类似的基础),因为任何次要的东西都无法解释,为什么ATR会因此而改变。好吧,操作系统部分没有敲响任何警钟。我知道的任何数据对象。他没有说getATR做了什么,但是IIRC,在Windows上,在重新通电之前,卡需要明确关闭电源;因此,如您所述,如果它没有重新供电,缓存的ATR将被返回。