问题:我的程序可以区分两种类型的卡:智能卡和简单的eeprom卡(Typ AT24C02SC)。
我在Windows系统事件日志中收到以下错误:
智能卡读卡器'SCM Microsystems Inc. SCR33x USB智能卡读卡器 0'拒绝IOCTL 0x3136b0:不支持该请求。 如果此错误仍然存在,则您的智能卡或读卡器可能不存在 运作正常。
命令标题:86 XX XX XX
伪代码 (我使用winscard.dll和MCSCM.dll):
void readCard()
{
winscard.SCardEstablishContext();
winscard.SCardListReaders();
winscard.SCardGetStatusChange();
while (card is not present)
{
}
// test if card is eeprom card
if (MCSCM.MCardInitialize() == 0)
{
if (MCSCM.MCardConnect() == 0)
{
MCSCM.MCardReadMemory();
isMCard = true;
}
}
MCSCM.MCardDisconnect();
MCSCM.MCardShutdown();
// if not, try if it is smartcard
if (winscard.SCardConnect() == true && isMCard == false)
{
winscard.SCardConnect();
...
// send apdus
}
winscard.SCardDisconnect();
winscard.SCardReleaseContext();
}
当我的阅读器中有智能卡时,我收到此错误,并检查它是否为ConnectMCard()
的eeprom卡。我必须首先检查eeprom卡的两种不同的卡类型,因为winscard.dll函数SCardConnect()
为每张卡(eeprom或智能卡)返回0(SUCCESS)。
这是有效的,但应该有更好的方法。