C++ SCardTransmit,如何读写智能卡
我在一台打印机上工作,试图读写一张非接触式卡片 这是我正在使用的硬件和软件的手册: 如果我理解正确,使用智能卡(读写)的过程是:C++ SCardTransmit,如何读写智能卡,c++,smartcard,rfid,smartcard-reader,contactless-smartcard,C++,Smartcard,Rfid,Smartcard Reader,Contactless Smartcard,我在一台打印机上工作,试图读写一张非接触式卡片 这是我正在使用的硬件和软件的手册: 如果我理解正确,使用智能卡(读写)的过程是: 使用scardesttablishContext()建立上下文 使用SCardConnect()通过所选读卡器连接到卡 使用SCardTransmit()与卡交谈 对吗 第1点和第2点工作正常,返回0(SCARD_S_SUCCESS),但SCardTransmit有问题 例如,如果我想阅读第5块,我使用以下代码: SCARD_IO_REQUEST pioRecv
- 例如,如果我想阅读第5块,我使用以下代码:
它返回一个错误代码22 如果我将SCARD_PROTOCOL_T0更改为SCARD_PROTOCOL_T1,它似乎可以工作(我不知道pbRecvBuffer值是否正确):pbRecvBuffer有2个字节,值为:6e 00,ret=0 这些价值观有意义吗 我阅读了scardtransmitapi(),在那里我理解我必须使用协议T=0,这是否意味着我必须让SCARD_协议T0工作?在这种情况下,我为什么会收到错误22?我做错了什么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);
- 如果我想在block 5中写作,我遵循相同的过程:SCardEstablishContext、SCardConnect和SCardTransmit。我将pbSendBuffer更改为:{(字节)0xFC,(字节)0xD0,(字节)0x05,(字节)0x00,0x10};,但我不太明白数据在哪里,我应该在SCardTransmit上设置什么参数。你能给我举个例子吗
多谢各位 你用什么类型的卡?
`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.