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