我正在使用打印机,试图读取和写入非接触式卡。
这是我正在使用的硬件和软件的手册:
manual contactless
如果我正确理解的话,对智能卡进行惰性化(读取和写入)的过程为:
那是对的吗?
点1和2可以正常工作,并返回0(SCARD_S_SUCCESS),但是我在SCardTransmit中遇到问题。
SCARD_IO_REQUEST pioRecvPci;
DWORD dwActiveProtocol, dwSendLength, dwRecvLength;
BYTE pbRecvBuffer[16];
BYTE pbSendBuffer[] = {(BYTE)0xFC, (BYTE)0xB0,(BYTE)0x05, (BYTE)0x00, (BYTE)0x00};
dwSendLength = sizeof(pbSendBuffer);
dwRecvLength = sizeof(pbRecvBuffer);
SCARD_IO_REQUEST pioSendPci;
pioSendPci.dwProtocol=SCARD_PROTOCOL_T0;
pioSendPci.cbPciLength= sizeof(pioSendPci);
ret = SCardTransmit(cardHandle, // SCard API
&pioSendPci,
pbSendBuffer, dwSendLength,
NULL, pbRecvBuffer, &dwRecvLength);
它返回错误代码22。
如果我将SCARD_PROTOCOL_T0更改为SCARD_PROTOCOL_T1,则似乎可以正常工作(我不知道pbRecvBuffer值是否正确):pbRecvBuffer具有2个字节,其值分别为:6e 00和ret = 0。
这些值(value)观有意义吗?
我读了SCardTransmit api(SCardTransmit),并且我知道我必须使用协议(protocol)T = 0,这是否意味着我必须放置SCARD_PROTOCOL_T0才能工作?在那种情况下,为什么我会收到错误22?我做错了什么?
非常感谢你!
最佳答案
`enter code here` we must check protocol using switch case and transmit like :
switch ( m_dwAP )
{
case SCARD_PROTOCOL_T0:
dwErrorFlags = SCardTransmit(this->m_hCardHandle,
SCARD_PCI_T0,
rgbIN,
bIN,
NULL,
rgbOUTTra,
&uwBufferLen);
break;
case SCARD_PROTOCOL_T1:
dwErrorFlags = SCardTransmit(this->m_hCardHandle,
SCARD_PCI_T1,
rgbIN,
bIN,
NULL,
rgbOUTTra,
&uwBufferLen);
break;
}
here m_dwAP is active protocol.
关于c++ - SCardTransmit,如何读写智能卡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24560471/