IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_TRANSMIT请求将数据传输到插入的智能卡并从中接收数据。
主要代码
输入缓冲区
- 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 |