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 中检测到的智能卡。 这些 APDU 针对 PC/SC 规范进行了解释(第 4.3.7 节对不同 NFC 无接触标记格式的支持有更详细的要求)。 由于 NFP 功能与智能卡共享相同的驱动程序,因此该卡应在发现后立即连接,因此不需要“传输”显式连接。

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

要求

要求 价值
标头 winsmcrd.h

另请参阅

近场通信(NFC)设计指南

智能卡设计指南