SCardTrasmit возвращает пустой массив байтов приема
Я работаю над реализацией aC# PC/SC с читателями ACS и тегами NFC.
Я сделал прототип SCardTransmit следующим образом:
[DllImport("winscard.dll")]
public static extern int SCardTransmit (Int32 hCard, ref SCARD_IO_REQUEST pioSendRequest, byte[] SendBuff, Int32 SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest, byte[] RecvBuff, out Int32 RecvBuffLen);
И у меня есть следующий код:
SCard.SCARD_IO_REQUEST ioRequest = new SCard.SCARD_IO_REQUEST();
ioRequest.dwProtocol = Protocol; // Is going to be T=1
ioRequest.cbPciLength = 8;
byte[] cmdBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 };
byte[] rcvBytes = new byte[10];
int rcvLenght = 0;
retCode = SCard.SCardTransmit(Handle,
ref ioRequest, cmdBytes, cmdBytes.Length,
ref ioRequest, rcvBytes, out rcvLenght);
if (retCode != SCard.SCARD_S_SUCCESS)
throw new Exception("Failed querying tag UID: " + retCode);
Кажется, что все (не показано) вещи инициализации работают нормально, и я могу успешно получить ATR тега.
Теперь, запустив этот код, я получаю успешный код возврата, я получаю непротиворечивое значение длины принятых байтов, но соответствующий байтовый массив пуст (нули).
Кто-нибудь может посоветовать по этому поводу?
Спасибо.
1 ответ
Прототип для SCardTransmit
скорее всего проблема. Я бы написал это так:
[DllImport("winscard.dll")]
public static extern uint SCardTransmit(Int32 hCard, SCARD_IO_REQUEST pioSendPci, [In] byte[] pbSendBuffer, uint cbSendLength, SCARD_IO_REQUEST pioRecvPci, [In, Out] byte[] pbRecvBuffer, ref uint pcbRecvLength);
Основным отличием является второй по последнему параметру pbRecvBuffer
, который объявлен с атрибутами In
а также Out
,