IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)

Запрос IOCTL_SMARTCARD_TRANSMIT передает данные в вставленный смарт-карта и получает данные из нее.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

  • 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 передает данные от клиента в обнаруженную смарт-карта в APDU, совместимом с ISO7816-4. Эти API интерпретируются в соответствии со спецификацией PC/SC (раздел 4.3.7 содержит более подробные требования к поддержке различных форматов бесконтактных тегов NFC). Так как функция NFP использует один и тот же драйвер со смарт-карта, карта должна быть подключена сразу после обнаружения. Явное подключение для передачи не требуется.

Так как входной и выходной буфер указывают на одну и ту же область памяти, драйвер должен избегать перезаписи входных данных. Используйте библиотеку драйверов смарт-карта, чтобы убедиться, что входные данные не перезаписаны.

Требования

Требование Значение
Заголовок winsmcrd.h

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

Руководство по проектированию ближней связи (NFC)

Руководство по проектированию smart карта