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结构本身的大小, (通常为 8 个字节) 。 结构用于将来的协议。 将传输到卡的数据必须立即遵循此结构。

输出缓冲区

字节缓冲区包含传输结果。 缓冲区指向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 中检测到的智能卡。 这些 APTU 根据 PC/SC 规范进行解释 (第 4.3.7 节对支持不同 NFC 接触式标签格式) 有更详细的要求。 由于 NFP 功能与智能卡共享相同的驱动程序,因此卡应在发现后立即连接,因此“传输”不需要显式连接。

由于输入缓冲区和输出缓冲区指向相同的内存区域,因此驱动程序必须避免覆盖输入数据。 使用智能卡驱动程序库确保不会覆盖输入数据。

要求

要求
Header winsmcrd.h

另请参阅

近场通信 (NFC) 设计指南

智能卡设计指南