IOCTL_SMARTCARD_SET_PROTOCOL IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_SET_PROTOCOL 请求设置驱动程序在检测到卡后用于与智能卡通信的协议(插入)。
主要代码
输入缓冲区
Irp->AssociatedIrp.SystemBuffer 包含以下传输可接受的协议掩码。 掩码可以是以下值的按位 OR:
- SCARD_PROTOCOL_RAW
- SCARD_PROTOCOL_T0
- SCARD_PROTOCOL_T1
- SCARD_PROTOCOL_DEFAULT
- SCARD_PROTOCOL_OPTIMAL
最后两个值是额外的位定义,指示驱动程序必须显式执行协议类型选择(PTS),并具有最佳通信参数(SCARD_PROTOCOL_OPTIMAL)或使用卡的隐式协议(SCARD_PROTOCOL_DEFAULT)。 如果卡仅支持一个具有一组通信参数的协议,则忽略位。
Parameters.DeviceIoControl.InputBufferLength 必须设置为 sizeof(ULONG)。 驱动程序决定掩码中要与插入卡片一起使用的协议。
输出缓冲区
- Irp->AssociatedIrp.SystemBuffer 驱动程序在此处存储所选协议(例如,SCARD_PROTOCOL_T1)。 只能设置一位出掩码。
输出缓冲区长度
- Parameters.DeviceIoControl.OutputBufferLength 必须为 sizeof(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 值。
要求
要求 | 价值 |
---|---|
标头 | winsmcrd.h |