IOCTL_SMARTCARD_SET_PROTOCOL IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_SET_PROTOCOL请求设置在检测到卡 (插入) 后,驱动程序将用来与智能卡通信的协议。
主要代码
输入缓冲区
Irp->AssociatedIrp.SystemBuffer 包含可接受以下传输的协议掩码。 掩码可以是以下值的按位或:
- SCARD_PROTOCOL_RAW
- SCARD_PROTOCOL_T0
- SCARD_PROTOCOL_T1
- SCARD_PROTOCOL_DEFAULT
- SCARD_PROTOCOL_OPTIMAL
最后两个值是其他位定义,指示驱动程序必须显式执行具有最佳通信参数 ( (SCARD_PROTOCOL_OPTIMAL) PTS) 的协议类型选择,或者将卡的隐式协议与标准参数 (SCARD_PROTOCOL_DEFAULT) 。 如果卡仅支持一个具有一组通信参数的协议,则忽略位。
Parameters.DeviceIoControl.InputBufferLength 必须设置为 sizeof (ULONG) 。 驱动程序决定掩码中的哪个协议用于插入的卡。
输出缓冲区
- Irp->AssociatedIrp.SystemBuffer 驱动程序将所选协议存储在此处 (例如SCARD_PROTOCOL_T1) 。 只能设置掩码外 1 位。
输出缓冲区长度
- Parameters.DeviceIoControl.OutputBufferLength 的大小必须为 (ULONG) 。
状态块
Irp->IoStatus.Information 必须设置为 sizeof (ULONG) 。
Irp->IoStatus.Status 设置为以下值之一。
值 | 含义 |
---|---|
STATUS_SUCCESS | 已成功选择协议。 |
STATUS_NO_MEDIA | 读取器中未检测到智能卡。 |
STATUS_IO_TIMEOUT | 操作超时。 |
STATUS_NOT_SUPPORTED | 智能卡不支持任何请求的协议。 |
STATUS_INVALID_DEVICE_REQUEST | 掩码不包含任何已知协议。 |
有关详细信息,请参阅 NTSTATUS 值。
要求
要求 | 值 |
---|---|
Header | winsmcrd.h |