大家好,我还有另外一个问题:)
我想通过协议t = 1来传达智能卡。我正在使用Windows智能卡api(winscard.dll)和C#。我有
SCardEstablishContext(),SCardListReaders(),SCardConnect(),SCardStatus(),SCardTransmit(),SCardDisconnect(),SCardReleaseContext()函数用于传输数据。
我想用下面的代码
选择主文件(mf)SCARD_IO_REQUEST sendreq,recvreq;
byte[] sendbuff = { 0x00, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00 };
sendreq.protocol = SCARD_PROTOCOL_T1;
sendreq.pciLength = 8;
recvreq.protocol = SCARD_PROTOCOL_T1;
recvreq.pciLength = 8;
byte[] RecvBuff = new byte[258];
int recvbufflen = 2;
SCardTransmit(hCard, ref sendreq, ref sendbuff[0], sendbuff.Length, ref recvreq, ref RecvBuff[0], ref recvbufflen);
成功任务的响应必须为9000但我收到6A86(ins参数无效)。
我的问题是:
1-为什么我收到此回复?
2-如果是,为什么我必须用pts命令更改协议? (该卡仅支持t1)
3-协议t = 1帧必须是序言字段+信息字段+结尾字段。但我没有将序言和结尾字节添加到sendbuff。是否有必要在使用windows api时将它们添加到sendbuff?
谢谢..
答案 0 :(得分:0)
由于参数p1和p2,我已经解决了问题。尽管收到“无效参数”,我认为参数是正确的。所以我在其他地方搜索错误。
选择文件时,参数必须为0x02和0x0C。
编辑:在guidot的评论之后,我意识到我没有使用这些参数来选择主文件。 (试过但稍后改变)要在MF下选择EF:
byte[] sendbuff = {0x00, 0xA4, 0x02, 0x0C, 0x02, id1, id2}
感谢guidot ..