区分智能卡/ eeprom卡

时间:2015-12-15 12:04:15

标签: c# windows smartcard winscard

问题:我的程序可以区分两种类型的卡:智能卡和简单的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)。

这是有效的,但应该有更好的方法。

0 个答案:

没有答案