在调用完 SCardconnect 之后,需要调用一次
SCardReconnect
然后再调用获取卡片状态。
否则一条命令之后,隔3秒再发另外一个,就会返回SCARD_W_RESET_CARD
SCARDCONTEXT hContext;
SCARDHANDLE hCard;
DWORD dwActiveProtocol, dwSendLength, dwRecvLength;
LONG rv;
BYTE pbRecvBuffer[10];
BYTE pbSendBuffer[] = {0xC0, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00};
...
rv =
SCardEstablishContext(
SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
SCARD_PROTOCOL_T0, &hCard, &dwActiveProtocol);
...
dwSendLength =
sizeof(pbSendBuffer);
dwRecvLength =
sizeof(pbRecvBuffer);
rv =
SCardTransmit(hCard,
SCARD_PCI_T0, pbSendBuffer, dwSendLength,
&pioRecvPci, pbRecvBuffer, &dwRecvLength);
/ * Card has been reset by another application * /
if (rv ==
SCARD_W_RESET_CARD)
{
SCARD_RESET_CARD, &dwActiveProtocol);
}