Как получить ATR со смарткарты по протоколу PC/SC?

Пишу мост между протоколами CEN/XFS (используется для доступа к оборудованию программами банкоматов, в том числе доступа к кард-ридерам) и PC/SC (протокол для чтения смарт-кард). Так вот, протокол CEN/XFS требует от меня отдать ему ATR (Answer To Reset) от карты, а в интернетах вроде пишут, что данный ответ протокол PC/SC обрабатывает сам. Можно ли его как-то получить?
  • Вопрос задан
  • 3394 просмотра
Решения вопроса 1
@Mingun Автор вопроса
Так, вопрос отменяется. Не обратил внимание, что можно получать различные атрибуты, в том числе ATR, либо специальной функцией:
LONG rv;
SCARDCONTEXT hContext;
SCARDHANDLE hCard;
DWORD dwActiveProtocol;
unsigned char *pbAttr;
DWORD dwAttrLen;
...
rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
rv = SCardConnect(hContext, "Reader X", SCARD_SHARE_SHARED,
         SCARD_PROTOCOL_RAW, &hCard, &dwActiveProtocol);
dwAttrLen = SCARD_AUTOALLOCATE;
// Вот как раз получение ATR в pbAttr.
rv = SCardGetAttrib(hCard, SCARD_ATTR_ATR_STRING, (unsigned char *)&pbAttr, &dwAttrLen);

либо вместе с прочим статусом:
SCARDCONTEXT hContext;
SCARDHANDLE hCard;
DWORD dwActiveProtocol;
DWORD dwState, dwProtocol, dwAtrLen, dwReaderLen;
BYTE pbAtr[MAX_ATR_SIZE];
...
rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
rv = SCardConnect(hContext, "Reader X", SCARD_SHARE_SHARED,
         SCARD_PROTOCOL_T0, &hCard, &dwActiveProtocol);
...
dwAtrLen = sizeof(pbAtr);
rv = SCardStatus(hCard, NULL, &dwReaderLen, &dwState, &dwProtocol, pbAtr, &dwAtrLen);

Аббревиатура Atr в названии у меня прочно проассоциировалась с атрибутами, а не ATR :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы