我正在使用Mifare 1k
卡和acr1252
阅读器;我正在使用visual c++
和Winscard
库进行开发。
我成功使用以下代码读取了单个块:
// Read binary blocks
// Class: FF
// INS: B0
// P1: 00
// P2: the starting block number
// Le: length to read (multiple of 16)
BYTE ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x10 };
BYTE readRes[256] = { 0 };
DWORD lenRead = sizeof(readRes);
SCardTransmit(hCard, SCARD_PCI_T1, ReadBinary, sizeof(ReadBinary), NULL, readRes, &lenRead)
此函数调用返回SCARD_S_SUCCESS
,并且readRes
包含块值+ SW1
和SW2
,其值为0x90 0x00
(成功)
我要执行的操作是使用相同的功能读取2个连续的内存块(即扇区0的块0和块1),仅使用以下命令更改apdu命令:
ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x20 };
// Last byte changed to read 2 blocks
但不起作用:返回状态仍为SCARD_S_SUCCESS
,但读取的数据仅包含值为SW1
的{{1}}和SW2
(错误)。
带有0x63 0x00
卡的AFAIK可以读取扇区的前3个块,但是所有尝试读取多个扇区以外的内容的读取测试均会因该错误而失败。
我想念什么吗?