示例序列
下面是智能卡资源管理器中的 IOCTL 的示例序列:
启动顺序
使用 DevObj 或 CfgMgr API 和智能卡访问设备接口 GUID 来发现 NFC 设备驱动程序的名称,并将其与 CreateFile 配合使用以打开设备句柄。
初始化线程池。
确定读取者名称。
- SCARD_ATTR_VENDOR_NAME、SCARD_ATTR_VENDOR_IFD_TYPE 和 SCARD_ATTR_DEVICE_UNIT 上的IOCTL_SMARTCARD_GET_ATTRIBUTE
确定读取器特征。
- SCARD_ATTR_CHARACTERISTICS 上的IOCTL_SMARTCARD_GET_ATTRIBUTE
启动卡状态监视器。
IOCTL_SMARTCARD_IS_PRESENT – 等待智能卡到来。
IOCTL_SMARTCARD_IS_ABSENT – 等待智能卡出发。
电源重置无关紧要,因为我们不支持SCARD_SWALLOWED、SCARD_POWERED状态。
连接序列
循环开始。
IOCTL_SMARTCARD_GET_STATE
案例SCARD_UNKNOWN和SCARD_ABSENT,不执行任何操作
案例SCARD_PRESENT,吞咽卡
案例SCARD_SWALLOWED,冷重置
案例SCARD_POWERED,暖重置
事例SCARD_NEGOTIABLE,确定 ATR 卡
事例SCARD_SPECIFIC,确定 ATR 和协议卡
IOCTL_SMARTCARD_SET_PROTOCOL
断开连接序列
电源关闭超时开始。
循环开始。
IOCTL_SMARTCARD_GET_STATE
案例SCARD_SPECIFIC、SCARD_NEGOTIABLE、SCARD_POWERED、关闭电源
案例SCARD_SWALLOWED,SCARD_PRESENT,不执行任何操作
案例SCARD_ABSENT,SCARD_UNKNOWN,不执行任何操作