我正在尝试使用Windows上的PC/SC API与ACS ACR122U NFC读卡器进行通信(winscard.dll)。
根据此文档,有一个伪APDU可用于读取读卡器固件版本:FF 00 48 00 00
读卡器中有一张卡,我就可以工作:我打电话给SCardEstablishContext()
,然后SCardConnectA()
得到一个句柄,然后用句柄我打电话给SCardTransmit()
。正如预期的那样,我得到了答案。
但是,如果没有读卡器中的卡,如何做到这一点呢?
上面的文件说:
• 如果标签已经连接
,可以通过"ACR122U PICC 接口"发送伪 APDU• 如果标签尚未显示,可以使用"转义命令"发送伪 APDU
我不知道这意味着什么。如果我尝试与上述相同的方法,而读卡器中没有卡,则SCardConnectA()
调用失败并出现SCARD_W_REMOVED_CARD
错误,这意味着我没有句柄可以调用SCardTransmit()
。
好的,我想通了。要允许在读卡器中没有卡的情况下呼叫SCardConnectA()
,dwShareMode
必须SCARD_SHARE_DIRECT
并且必须dwPreferredProtocols
0
。