Функция SCardGetAttrib (winscard.h)

Функция SCardGetAttrib извлекает текущие атрибуты средства чтения для заданного дескриптора. Это не влияет на состояниесредства чтения, драйвера или карта.

Синтаксис

LONG SCardGetAttrib(
  [in]      SCARDHANDLE hCard,
  [in]      DWORD       dwAttrId,
  [out]     LPBYTE      pbAttr,
  [in, out] LPDWORD     pcbAttrLen
);

Параметры

[in] hCard

Значение ссылки, возвращаемое из SCardConnect.

[in] dwAttrId

Идентификатор получаемого атрибута . В следующей таблице перечислены возможные значения для dwAttrId. Эти значения доступны только для чтения. Обратите внимание, что поставщики могут поддерживать не все атрибуты.

Значение Значение
SCARD_ATTR_ATR_STRING
Ответ на сброс строки (ATR).
SCARD_ATTR_CHANNEL_ID
DWORD закодирован как 0xDDDDCCCC, где DDDD = тип канала данных и CCCC = номер канала:
  • Для DDDD определены следующие кодировки:
  • 0x01 последовательного ввода-вывода; CCCC — это номер порта.
  • 0x02 параллельных операций ввода-вывода; CCCC — это номер порта.
  • 0x04 порта клавиатуры PS/2; CCCC равен нулю.
  • 0x08 SCSI; CCCC — это номер идентификатора SCSI.
  • интегрированная среда разработки 0x10; CCCC — это номер устройства.
  • 0x20 USB; CCCC — это номер устройства.
  • 0xF определяемый поставщиком интерфейсy с y в диапазоне от нуля до 15; CCCC определяется поставщиком.
SCARD_ATTR_CHARACTERISTICS
DWORD , указывающий, какие механические характеристики поддерживаются. Если значение равно нулю, специальные характеристики не поддерживаются. Обратите внимание, что можно задать несколько битов:
  • Механизм глотания карты 0x00000001
  • Механизм извлечения карточки 0x00000002
  • Механизм захвата карт 0x00000004
Все остальные значения зарезервированы для использования в будущем (РФС).
SCARD_ATTR_CURRENT_BWT
Текущее время ожидания блока.
SCARD_ATTR_CURRENT_CLK
Текущая тактовая частота в кГц.
SCARD_ATTR_CURRENT_CWT
Время ожидания текущего символа.
SCARD_ATTR_CURRENT_D
Коэффициент преобразования скорости бита.
SCARD_ATTR_CURRENT_EBC_ENCODING
Кодирование текущего элемента управления блоком ошибок.

0 = продольная избыточность проверка (LRC)

1 = циклическая избыточность проверка (CRC)

SCARD_ATTR_CURRENT_F
Коэффициент преобразования часов.
SCARD_ATTR_CURRENT_IFSC
Текущий размер байтов для размера информационного поля карта.
SCARD_ATTR_CURRENT_IFSD
Текущий размер байтов для устройства с размером информационного поля.
SCARD_ATTR_CURRENT_N
Текущее время охраны.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORD закодирован как 0x0rrrpppp, где rrr — RFU и должен быть 0x000. pppp кодирует текущий тип протокола. Какой бы бит ни был задан, указывает, какой протокол ISO используется в настоящее время. (Например, если задан нулевой бит, действует протокол T=0 .)
SCARD_ATTR_CURRENT_W
Текущее время ожидания работы.
SCARD_ATTR_DEFAULT_CLK
Тактовая частота по умолчанию в кГц.
SCARD_ATTR_DEFAULT_DATA_RATE
Скорость передачи данных по умолчанию в битах.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Отображаемое имя читателя.
SCARD_ATTR_DEVICE_IN_USE
Зарезервировано для последующего использования.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Системное имя читателя.
SCARD_ATTR_DEVICE_UNIT
Экземпляр средства чтения этого поставщика, подключенный к компьютеру. Первым экземпляром будет устройство 0, следующим будет единица 1 (если это та же торговая марка средства чтения) и т. д. Два разных бренда читателей будут иметь ноль для этого значения.
SCARD_ATTR_ICC_INTERFACE_STATUS
Один байт. Ноль, если интеллектуальный карта электрический контакт не активен; ненулевое значение, если контакт активен.
SCARD_ATTR_ICC_PRESENCE
Один байт, указывающий на присутствие смарт-карта:

0 = отсутствует

1 = карта присутствует, но не проглатывается (применяется только в том случае, если средство чтения поддерживает интеллектуальное карта глотание)

2 = карта присутствует (и проглатывается, если средство чтения поддерживает интеллектуальное карта глотание)

4 = карта конфискованы.

SCARD_ATTR_ICC_TYPE_PER_ATR
Один байт, указывающий тип смарт-карта:

0 = неизвестный тип

1 = 7816 Асинхронный

2 = 7816 Синхронный

Другие значения РФС.

SCARD_ATTR_MAX_CLK
Максимальная тактовая частота в кГц.
SCARD_ATTR_MAX_DATA_RATE
Максимальная скорость передачи данных в бит/с.
SCARD_ATTR_MAX_IFSD
Максимальное число байтов для устройства с размером информационного файла.
SCARD_ATTR_POWER_MGMT_SUPPORT
Ноль, если устройство не поддерживает выключение питания при вставке смарт-карта. Ненулевое значение в противном случае.
SCARD_ATTR_PROTOCOL_TYPES
DWORD закодирован как 0x0rrrpppp, где rrr — RFU и должен быть 0x000. pppp кодирует поддерживаемые типы протоколов. Значение "1" в заданной позиции бита указывает на поддержку связанного протокола ISO, поэтому если заданы биты ноль и один, поддерживаются протоколы T=0 и T=1 .
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Серийный номер устройства интерфейса, предоставленного поставщиком.
SCARD_ATTR_VENDOR_IFD_TYPE
Предоставленный поставщиком тип устройства интерфейса (обозначение модели средства чтения).
SCARD_ATTR_VENDOR_IFD_VERSION
Версия устройства интерфейса, предоставляемая поставщиком (DWORD в формате 0xMMmmbbbb , где MM = основная версия, mm = дополнительный номер версии, а bbbb = номер сборки).
SCARD_ATTR_VENDOR_NAME
Имя поставщика.

[out] pbAttr

Указатель на буфер, который получает атрибут, идентификатор которого указан в dwAttrId. Если это значение равно NULL, SCardGetAttrib игнорирует длину буфера, указанную в pcbAttrLen, записывает длину буфера, который был бы возвращен, если бы этот параметр не имел значения NULL в pcbAttrLen, и возвращает код успешного выполнения.

[in, out] pcbAttrLen

Длина буфера pbAttr в байтах и получает фактическую длину полученного атрибута. Если длина буфера указана как SCARD_AUTOALLOCATE, то pbAttr преобразуется в указатель на указатель байта и получает адрес блока памяти, содержащего атрибут . Этот блок памяти должен быть освобожден с помощью SCardFreeMemory.

Возвращаемое значение

Эта функция возвращает различные значения в зависимости от того, является ли она успешной или неудачной.

Код возврата Описание
Успешно
SCARD_S_SUCCESS.
Значение атрибута не поддерживается.
ERROR_NOT_SUPPORTED.
Другой сбой
Код ошибки. Дополнительные сведения см. в разделе Возвращаемые значения смарт-карты.

Комментарии

Функция SCardGetAttrib является функцией прямого доступа карта. Дополнительные сведения о других функциях прямого доступа см. в разделе Функции прямого доступа к карточкам.

Примеры

В следующем примере показано, как получить атрибут для карта средства чтения. В примере предполагается, что hCardHandle является допустимым дескриптором, полученным из предыдущего вызова функции SCardConnect .

LPBYTE   pbAttr = NULL;
DWORD    cByte = SCARD_AUTOALLOCATE;
DWORD    i;
LONG     lReturn;

lReturn = SCardGetAttrib(hCardHandle,
                         SCARD_ATTR_VENDOR_NAME,
                         (LPBYTE)&pbAttr,
                         &cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
    if ( ERROR_NOT_SUPPORTED == lReturn )
        printf("Value not supported\n");
    else
    {
        // Some other error occurred.
        printf("Failed SCardGetAttrib - %x\n", lReturn);
        exit(1);  // Or other appropriate action
    }
}
else
{
    // Output the bytes.
    for (i = 0; i < cByte; i++)
        printf("%c", *(pbAttr+i));
    printf("\n");

    // Free the memory when done.
    // hContext was set earlier by SCardEstablishContext
    lReturn = SCardFreeMemory( hContext, pbAttr );
}

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winscard.h
Библиотека Winscard.lib
DLL Winscard.dll

См. также раздел

SCardConnect

SCardFreeMemory

SCardSetAttrib