Задать вопрос
Ответы пользователя по тегу Компьютерные сети
  • Как получить ATR со смарткарты по протоколу PC/SC?

    @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 :)
    Ответ написан
    Комментировать