智能卡读取器,无法读取某些卡

莫伦斯塔克

我有一个使用智能卡读卡器的应用程序,允许用户访问系统的各个部分。在一个位置,我没有问题。但是另一家拥有不同类型卡制造商的公司则存在很多问题。它一直保持返回零的ID。然后查看事件日志,我看到了:在此处输入图片说明这是代码:

 card.Connect(reader, SHARE.Shared, PROTOCOL.T0orT1);

 var apduGetID = new APDUCommand(0xFF, 0xCA, 0, 0, null, 4);
 var apduRespGetID = card.Transmit(apduGetID);
long cardId = BitConverter.ToUInt32(apduRespGetID.Data.Reverse().ToArray(), 0);

第二个问题是,然后尝试调试代码,它可以正常工作,只有删除断点,我才能看到问题,但看不到哪里。有人可以帮帮我吗?

PS我发现了这个线程,但它不起作用:https : //superuser.com/questions/715688/smart-card-errors

更新:这是Transmit类

 public override APDUResponse Transmit(APDUCommand ApduCmd)
        {
            var RecvLength = (uint)(ApduCmd.Le + APDUResponse.SW_LENGTH);
            byte[] ApduBuffer;
            var ApduResponse = new byte[ApduCmd.Le + APDUResponse.SW_LENGTH];
            var ioRequest = new SCard_IO_Request
            {
                m_dwProtocol = m_nProtocol,
                m_cbPciLength = 8
            };

            // Build the command APDU
            if (ApduCmd.Data == null)
            {
                ApduBuffer = new byte[APDUCommand.APDU_MIN_LENGTH + ((ApduCmd.Le != 0) ? 1 : 0)];

                if (ApduCmd.Le != 0)
                {
                    ApduBuffer[4] = ApduCmd.Le;
                }
            }
            else
            {
                ApduBuffer = new byte[APDUCommand.APDU_MIN_LENGTH + 1 + ApduCmd.Data.Length];

                for (var nI = 0; nI < ApduCmd.Data.Length; nI++)
                {
                    ApduBuffer[APDUCommand.APDU_MIN_LENGTH + 1 + nI] = ApduCmd.Data[nI];
                }

                ApduBuffer[APDUCommand.APDU_MIN_LENGTH] = (byte)ApduCmd.Data.Length;
            }

            ApduBuffer[0] = ApduCmd.Class;
            ApduBuffer[1] = ApduCmd.Ins;
            ApduBuffer[2] = ApduCmd.P1;
            ApduBuffer[3] = ApduCmd.P2;

            m_nLastError = SCardTransmit(m_hCard, ref ioRequest, ApduBuffer, (uint)ApduBuffer.Length, IntPtr.Zero, ApduResponse, out RecvLength);

            if (m_nLastError != 0)
            {
                var msg = "SCardTransmit error: " + m_nLastError;
                throw new SmartCardException(msg, m_nLastError);
            }

            var apduData = new byte[RecvLength];

            for (var nI = 0; nI < RecvLength; nI++)
            {
                apduData[nI] = ApduResponse[nI];
            }

            return new APDUResponse(apduData);
        }

更新2:我也尝试过放置一些Thread.Sleep()

萨姆维尔·阿瓦涅索夫(Samvel Avanesov)

请检查第二台计算机上是否具有智能卡的所有最新驱动程序。另外,有时它有助于将制造商提供的驱动程序替换为“ Microsoft WUDF驱动程序”-https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn653571( v= vs.85 ) .aspx

请注意,插入操作系统时,操作系统会检测到两种类型的设备-智能卡枚举器设备(智能卡读取器)和智能卡(有时称为智能卡容器)本身。一个智能卡读取器可以包含多个智能卡。

智能卡的示例,该驱动程序已被Microsoft WUDF强制替换以使客户端应用程序(iBank2)正常工作:

四个智能卡WUDF类型

四个智能卡驱动程序已被基本的Microsoft驱动程序强制替换,以使应用程序正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

智能卡读取器ACR 38U-CCID无法识别空白SLE4442智能卡

来自分类Dev

NET技术的智能卡读取器开发

来自分类Dev

智能卡和智能卡读取器的数据传输

来自分类Dev

当NFC读取器未发送“ SELECT AID” APDU时,在Android上模拟智能卡

来自分类Dev

当NFC读取器未发送“ SELECT AID” APDU时,在Android上模拟智能卡

来自分类Dev

智能卡读取器是否具有任何加密功能?

来自分类Dev

通过远程桌面连接访问主机的智能卡读取器

来自分类Dev

读取智能卡的UID

来自分类Dev

编写和读取智能卡的证书

来自分类Dev

使用ACR38读卡器从SLE 4442智能卡读取数据

来自分类Dev

无法使用GP和Java连接某些智能卡

来自分类Dev

SD卡读取器突然停止识别卡

来自分类Dev

从智能卡(驱动程序卡)读取DIN(驱动程序标识号)

来自分类Dev

从智能卡(驱动程序卡)读取DIN(驱动程序标识号)

来自分类Dev

Girocard-Maestro智能卡读卡器问题,以读取持卡人姓名和IBAN

来自分类Dev

智能卡:无法获得 ATR

来自分类Dev

智能卡无法获得 ATR

来自分类Dev

为什么某些USB读取器在读取大容量SD卡时会遇到问题?

来自分类Dev

智能卡阅读器命名

来自分类Dev

智能卡读卡器命名

来自分类Dev

智能卡发行

来自分类Dev

使用标准PC卡(PCMCIA)读取器读取P2卡

来自分类Dev

javasmartcardIO-发生超时时如何取消主机和智能卡之间的读取操作?

来自分类Dev

Objective C / Mac /优胜美地:使用新的CryptoTokenKit API读取智能卡

来自分类Dev

使用pkcs#11从智能卡读取文本文件

来自分类Dev

智能卡CMS解密

来自分类Dev

智能卡相互认证

来自分类Dev

智能卡访问速度

来自分类Dev

使用dd向USB卡读取器上的CF卡写入零会导致大量读取

Related 相关文章

热门标签

归档