我正在使用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
并SW2
带有值0x63 0x00
(错误)。
带有卡的 AFAIKMifare 1k
可以读取一个扇区的前 3 个块,但所有尝试读取超过一个扇区的读取测试都会因该错误而失败。
我错过了什么吗?