示例序列

下面是智能卡资源管理器中的 IOCTL 的示例序列:

启动顺序

  1. 使用 DevObj 或 CfgMgr API 和智能卡访问设备接口 GUID 来发现 NFC 设备驱动程序的名称,并将其与 CreateFile 配合使用以打开设备句柄。

  2. 初始化线程池。

  3. 确定读取者名称。

    • SCARD_ATTR_VENDOR_NAME、SCARD_ATTR_VENDOR_IFD_TYPE 和 SCARD_ATTR_DEVICE_UNIT 上的IOCTL_SMARTCARD_GET_ATTRIBUTE
  4. 确定读取器特征。

    • SCARD_ATTR_CHARACTERISTICS 上的IOCTL_SMARTCARD_GET_ATTRIBUTE
  5. 启动卡状态监视器。

    • IOCTL_SMARTCARD_IS_PRESENT – 等待智能卡到来。

    • IOCTL_SMARTCARD_IS_ABSENT – 等待智能卡出发。

电源重置无关紧要,因为我们不支持SCARD_SWALLOWED、SCARD_POWERED状态。

连接序列

  1. 循环开始。

  2. IOCTL_SMARTCARD_GET_STATE

    • 案例SCARD_UNKNOWN和SCARD_ABSENT,不执行任何操作

    • 案例SCARD_PRESENT,吞咽卡

    • 案例SCARD_SWALLOWED,冷重置

    • 案例SCARD_POWERED,暖重置

    • 事例SCARD_NEGOTIABLE,确定 ATR 卡

    • 事例SCARD_SPECIFIC,确定 ATR 和协议卡

  3. IOCTL_SMARTCARD_SET_PROTOCOL

断开连接序列

  1. 电源关闭超时开始。

  2. 循环开始。

  3. IOCTL_SMARTCARD_GET_STATE

    • 案例SCARD_SPECIFIC、SCARD_NEGOTIABLE、SCARD_POWERED、关闭电源

    • 案例SCARD_SWALLOWED,SCARD_PRESENT,不执行任何操作

    • 案例SCARD_ABSENT,SCARD_UNKNOWN,不执行任何操作