ISO 15693:即使SCardConnect和SCardTransmit成功,SCardReconnect也会失败(C#)

时间:2014-01-08 20:52:30

标签: smartcard rfid winscard iso-15693

我正在尝试实现在尝试使用HID 5321智能卡读卡器读取TI Tag-IT RFID卡时,针对某些错误情况执行SCardReconnect的代码。如果发生传输错误,我会尝试重新连接并重试该操作。但是,当我执行重新连接时,我得到的返回值为6(无效手柄)。以下是调用SCardConnect和非工作SCardReconnect的代码。

int iRetval = HID.SCardConnect(
                    m_hContext,
                    m_sReaderName,
                    HiDWinscard.SCARD_SHARE_SHARED,
                    HiDWinscard.SCARD_PROTOCOL_T1,
                    ref m_hCard,
                    ref m_protocol);

int iRetval = HID.SCardReconnect(ref m_hCard,
                                      HiDWinscard.SCARD_SHARE_SHARED,
                                      HiDWinscard.SCARD_PROTOCOL_T1,
                                      0,  //Leave card alone SCARD_LEAVE_CARD
                                      ref m_protocol);

m_hCard和m_protocol相同(IntPtr)。

以下SCardTransmit也可以使用,它使用与m_hCard相同的引用

iRetval = HID.SCardTransmit(m_hCard, ref sioreq, 
                            sendBuffer, sendbufferlen, 
                            ref rioreq, receiveBuffer, 
                            ref receivebufferlen);

这是一个非常紧迫的问题。有没有人碰巧知道可能发生的事情?我事先感谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

在第一个问题上,我认为你不应该传递m_hCard作为参考。此外,我将使用从初始连接收到的协议重新连接作为首选协议:

int iRetval = HID.SCardReconnect(m_hCard,
                                 HiDWinscard.SCARD_SHARE_SHARED,
                                 m_protocol,
                                 0,  //Leave card alone SCARD_LEAVE_CARD
                                 ref m_protocol);