IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)
Запрос IOCTL_SMARTCARD_TRANSMIT передает данные и получает данные из вставленной смарт-карты.
Основной код
Входной буфер
- Irp->AssociatedIrp.SystemBuffer Указатель на структуру SCARD_IO_REQUEST, за которой следует передавать данные для передачи в вставленную смарт-карту.
Длина входного буфера
- Parameters.DeviceIoControl.InputBufferLength Содержит размер структуры плюс длину конечных байт данных (при наличии). Элемент dwProtocol должен быть установлен на протокол, выбранный ранее, а элемент cbPciLength должен иметь размер самой структуры SCARD_IO_REQUEST (обычно восемь байтов). Структура используется для будущих протоколов. Данные, которые будут передаваться на карточку, должны немедленно следовать этой структуре.
Выходной буфер
Буфер байтов содержит результат передачи. Буфер указывает на структуру SCARD_IO_REQUEST сразу после полученных данных.
- Irp->AssociatedIrp.SystemBuffer получает результат передачи. Этот буфер также должен начинаться с SCARD_IO_REQUEST структуры. Все данные, полученные от карточки, должны храниться сразу после структуры.
Длина выходного буфера
- Parameters.DeviceIoControl.OutputBufferLength Содержит длину выходного буфера.
Блок состояния
Irp->IoStatus.Status имеет одно из следующих значений.
Ценность | Значение |
---|---|
STATUS_SUCCESS | Передача была успешной. |
STATUS_NO_MEDIA | Смарт-карта не обнаружена в средстве чтения. |
STATUS_IO_TIMEOUT | Время ожидания операции истекло. |
STATUS_INVALID_DEVICE_STATE | Протокол в файле заголовка не соответствует выбранному ранее протоколу смарт-карты. |
STATUS_BUFFER_TOO_SMALL | Буфер выходных данных слишком мал для возвращаемых данных. |
STATUS_DEVICE_POWERED_OFF | Радиоконтроль близкого взаимодействия отключен. |
Замечания
IOCTL_SMARTCARD_TRANSMIT передает данные от клиента на обнаруженную смарт-карту в ISO7816-4, совместимой с APDU. Эти API-интерфейсы интерпретируются в соответствии с спецификацией PC/SC (раздел 4.3.7 имеет более подробные требования к поддержке различных форматов тегов без контакта NFC). Так как функция NFP использует тот же драйвер с смарт-картой, карточка должна быть подключена сразу после обнаружения, для передачи не требуется явное подключение.
Так как входной буфер и выходной буфер указывают на ту же область памяти, драйвер должен избегать перезаписи входных данных. Используйте библиотеку драйверов смарт-карт, чтобы убедиться, что входные данные не перезаписаны.
Требования
Требование | Ценность |
---|---|
заголовка | winsmcrd.h |
См. также
руководство по проектированию для связи с полями (NFC)