Пример последовательности

Ниже приведен пример последовательности ioCTL в диспетчере ресурсов смарт-карт.

Последовательность запуска

  1. Используйте API DevObj или CfgMgr с GUID интерфейса доступа к смарт-карте, чтобы обнаружить имя драйвера устройства NFC, и использовать его с CreateFile, чтобы открыть дескриптор устройства.

  2. Инициализация пула потоков.

  3. Определите имя средства чтения.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE и SCARD_ATTR_DEVICE_UNIT
  4. Определите характеристики средства чтения.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE на SCARD_ATTR_CHARACTERISTICS
  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, ничего не делать