структура SMARTCARD_EXTENSION (smclib.h)
Структура SMARTCARD_EXTENSION используется драйвером чтения смарт-карт и библиотекой драйверов смарт-карт для доступа ко всем другим структурам данных смарт-карт.
Синтаксис
typedef struct _SMARTCARD_EXTENSION {
ULONG Version;
VENDOR_ATTR VendorAttr;
NTSTATUS( *ReaderFunction[16];
SCARD_CARD_CAPABILITIES CardCapabilities;
ULONG LastError;
struct {
PULONG Information;
PUCHAR RequestBuffer;
ULONG RequestBufferLength;
PUCHAR ReplyBuffer;
ULONG ReplyBufferLength;
} IoRequest;
ULONG MajorIoControlCode;
ULONG MinorIoControlCode;
POS_DEP_DATA OsData;
SCARD_READER_CAPABILITIES ReaderCapabilities;
PREADER_EXTENSION ReaderExtension;
SMARTCARD_REPLY SmartcardReply;
SMARTCARD_REQUEST SmartcardRequest;
T0_DATA T0;
T1_DATA T1;
PPERF_INFO PerfInfo;
ULONG Reserved[25 - sizeof(PPERF_INFO)];
} *PSMARTCARD_EXTENSION, SMARTCARD_EXTENSION;
Члены
Version
Указывает версию этой структуры.
VendorAttr
Содержит сведения, определяющие драйвер чтения, например имя поставщика, номер единицы и серийный номер.
ReaderFunction[16]
Строка в блоке синтаксиса должна читать NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
Указатель на массив функций обратного вызова для читателей. Функции обратного вызова, которые может реализовать драйвер читателя, предоставленный поставщиком. Драйвер чтения делает эти функции обратного вызова доступными для подпрограммы библиотеки смарт-карт, SmartcardDeviceControl, чтобы вызвать, сохраняя указатели на них в расширении устройства смарт-карты.
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
Содержит возможности вставленной смарт-карты.
LastError
Не используется.
IoRequest
Структура со следующими элементами:
IoRequest.Information
Содержит количество возвращаемых байтов.
IoRequest.RequestBuffer
Указатель на данные в запросе ввода-вывода пользователя, который будет отправлен на карту.
IoRequest.RequestBufferLength
Указывает количество байтов для отправки на карточку.
IoRequest.ReplyBuffer
Указатель на буфер, содержащий данные, возвращаемые запросом ввода-вывода.
IoRequest.ReplyBufferLength
Указывает количество байтов данных, возвращаемых запросом ввода-вывода.
MajorIoControlCode
Содержит основной код элемента управления ввода-вывода.
MinorIoControlCode
Содержит дополнительный код элемента управления ввода-вывода.
OsData
Содержит сведения, относящиеся к операционной системе и типу драйвера.
ReaderCapabilities
Содержит возможности средства чтения с клавиатуры.
ReaderExtension
Содержит данные, относящиеся к средству чтения смарт-карт.
SmartcardReply
Содержит данные, поступающие от средства чтения.
SmartcardRequest
Содержит текущую команду и данные, отправляемые смарт-карте.
T0
Содержит данные для использования с протоколом T=0.
T1
Содержит данные, используемые с протоколом T=1.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
Зарезервировано для использования системы.
Замечания
Эта структура передается всем функциям обратного вызова.
Отдельные функции обратного вызова определяются рядом константных значений, которые следует использовать в качестве индексов в массив ReaderFunction.
Индекс | Описание | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | Необязательный. Функция синтаксического анализа RDF_ATR_PARSE анализирует ответ на сброс (ATR) библиотеки драйверов смарт-карт, если библиотека драйверов не может распознать или проанализировать библиотеку драйверов смарт-карт. | ||||||||
RDF_CARD_EJECT | Необязательный. функция обратного вызова RDF_CARD_EJECT Функция обратного вызова RDF_CARD_EJECT извлекает вставленную смарт-карту из средства чтения. |
||||||||
RDF_CARD_POWER | Функция обратного вызова RDF_CARD_POWER сбрасывает или отключает вставленную смарт-карту. Это обязательно для драйверов чтения смарт-карт для реализации этой функции обратного вызова.
Во входных данных структура, на которую указывает SmartcardExtension, должны иметь следующие значения элементов:
|
||||||||
RDF_CARD_TRACKING | Функция обратного вызова RDF_CARD_TRACKING устанавливает обработчик событий для отслеживания при каждом вставке или удалении карточки из средства чтения карт. Это обязательно для драйверов чтения смарт-карт для реализации этой функции обратного вызова.
При получении запроса IOCTL_SMARTCARD_IS_PRESENT библиотека драйверов определяет, присутствует ли смарт-карта. Если смарт-карта присутствует, библиотека драйверов завершает запрос с состоянием STATUS_SUCCESS. Если нет смарт-карты, библиотека драйверов вызывает функцию обратного вызова отслеживания смарт-карт драйвера чтения, а драйвер чтения начинает искать смарт-карту. После запуска отслеживания смарт-карт библиотека драйверов помечает запрос как состояние STATUS_PENDING. Библиотека драйверов завершает запрос. драйверы устройств WDM Соответствующая библиотека драйверов WDM добавляет указатель на запрос в SmartcardExtension->OsData->NotificationIrp. Драйвер чтения должен завершить запрос, как только он обнаружит, что смарт-карта была вставлена или удалена. Драйвер чтения завершает запрос путем вызова IoCompleteRequest, после чего драйвер читателя должен задать элемент NotificationIrp участника SmartcardExtension —> OsData обратно в NULL, чтобы сообщить библиотеке драйверов, что драйвер чтения может принимать дополнительные запросы на отслеживание смарт-карт. Так как этот вызов может иметь неопределенное время, и вызывающий объект может завершить запрос до завершения, важно пометить этот IRP как отменяемый.
|
||||||||
RDF_IOCTL_VENDOR | Функция обратного вызова RDF_IOCTL_VENDOR выполняет операции IOCTL, относящиеся к поставщику. Это необязательно для драйверов чтения смарт-карт для реализации этой функции обратного вызова.
При входе вызывающий объект должен передать следующие значения функции:
|
||||||||
RDF_READER_SWALLOW | Функция обратного вызова RDF_READER_SWALLOW выполняет механический глоток, что происходит, когда смарт-карта полностью вставляется в средство чтения смарт-карт. Это необязательно для драйверов чтения смарт-карт для реализации этой функции обратного вызова. | ||||||||
RDF_SET_PROTOCOL | Функция обратного вызова RDF_SET_PROTOCOL выбирает протокол передачи для вставленной смарт-карты. Драйверы средства чтения смарт-карт должны реализовать эту функцию обратного вызова.
При входе вызывающий объект должен передать следующие значения функции:
|
||||||||
RDF_TRANSMIT | Функция обратного вызова RDF_TRANSMIT выполняет передачу данных. Драйверы средства чтения смарт-карт должны реализовать эту функцию обратного вызова.
При входе вызывающий объект должен передать следующие значения функции:
Элемент dwProtocol должен содержать идентификатор протокола, возвращаемый вызовом IOCTL_SMARTCARD_SET_PROTOCOL. Элемент cbPciLength содержит размер структуры SCARD_IO_REQUEST в байтах. Размер этой структуры обычно составляет 8 байт. За SCARD_IO_REQUEST структурой следует данные (протокол) для передачи на карту. В зависимости от протокола, используемого для передачи, библиотека предлагает несколько функций поддержки. Дополнительные сведения об этих функциях поддержки см. в разделе SmartcardT0Request (WDM) и SmartcardT1Request (WDM). RequestBuffer и ReplyBuffer указывают на тот же системный буфер. Если вы используете функцию библиотеки SmartcardxxRequest и SmartcardxReply, вы не перезаписываете входной буфер. Если эти функции не используются, создайте копию RequestBuffer перед началом передачи. Необходимо скопировать структуру SCARD_IO_REQUEST в параметр ReplyBuffer, а затем данные, полученные из карточки. Опять же, если вы используете функции SmartcardxxRequest и функции SmartcardxxReply, библиотека будет копировать структуру. |
Требования
Требование | Ценность |
---|---|
заголовка | smclib.h (include Smclib.h) |