2014-02-17 62 views
0

我想在windows中使用Winscard庫與非接觸式智能卡讀卡器進行通信來構建應用程序。 我能夠連接到該設備,但是當我嘗試這樣使用scardtransmit我得到一個錯誤16.我已附上一段代碼,我用下面ScardTransmit總是返回錯誤16

SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_T1; 
//SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_RAW; 
DWORD dwRecvLength; 
BYTE pbRecvBuffer[258]; 
BYTE cmd1[260]; 
cmd1[0]= 0xA0; 
cmd1[1]= 0x0D; 
cmd1[2]= 0x01; 
cmd1[3]= 0x00; 
cmd1[4]= 0x01; 
ULONG sendbuflen= 0x05; 
dwRecvLength = sizeof(pbRecvBuffer); 

rv2 = SCardTransmit(hCard, &pioSendPci , cmd1,sendbuflen ,NULL, pbRecvBuffer, &dwRecvLength); 
+0

你如何連接到讀卡器(即你使用什麼參數)? –

回答

1

您嘗試將命令發送一些數據發送看起來不像一個有效的APDU。

有效APDU(見ISO/IEC 7816-4)具有這種形式(除了延伸長度的APDU):

+--------+--------+--------+--------+--------+----------+--------+ 
| CLA | INS | P1  | P2  | [Lc] | [DATA] | [Le] | 
+--------+--------+--------+--------+--------+----------+--------+ 
| 1 Byte | 1 Byte | 1 Byte | 1 Byte | 1 Byte | Lc Bytes | 1 Byte | 
+--------+--------+--------+--------+--------+----------+--------+ 

Lc包含發送命令DATA字節數或爲空(即沒有Le)如果沒有DATA字節。 Le編碼期望的響應數據字節的數量,其中特殊情況Le爲空指示沒有期望的響應數據字節,並且Le = 0x00指示預期的響應數據字節爲256(或最大)。