Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Warning
titleИзменилось поведение функции SCardGetStatusChange

Начиная с версии RtPcsc 5.0.0 при ее использовании для обнаружения нового считывателя с помощью "\\?PnP?\Notification", необходимо указывать количество уже известных приложению считывателей в верхнем слове dwCurrentState.

Например, так:

SCARD_READERSTATE state;
state.szReader = "\\\\?PnP?\\Notification";
state.dwCurrentState = (1 << 16);

Если ожидаемое приложением количество считывателей не совпадет с реальным, управление будет сразу же возвращено, а в верхнем слове dwEventState будет содержаться текущее количество считывателей.

Пример работы с функцией SCardGetStatusChange, учитывающий поведение описанное на GitHub.

...

  • при RUTOKEN_CONTROL_CODE_START_NFC: параметр задан в формате "\(waitMessage)\0\(workMessage)\0\0" и содержит два сообщения:
    • waitMessage отображается во время ожидания карты,
    • workMessage отображается во время работы с картой;
  • при RUTOKEN_CONTROL_CODE_STOP_NFC: параметр содержит сообщение о завершении работы с картой;
  • при RUTOKEN_CONTROL_CODE_STOP_NFC_WITH_ERROR: параметр содержит сообщение о завершении работы с картой с уведомлением об ошибке;
  • при RUTOKEN_CONTROL_CODE_LAST_NFC_STOP_REASON: параметр не используется.

Рекомендуемый порядок работы с Рутокеном с NFC

...

  • получить список доступных ридеров с помощью функции SCardListReaders;
  • если ридер еще не появился – дождаться его появления с помощью функции SCardGetStatusChange;
  • вызов функции SCardConnect для нужного ридера с параметром dwShareMode == SCARD_SHARE_DIRECT;
  • вызов функции SCardControl с параметром RUTOKEN_CONTROL_CODE_START_NFC;
  • работа с Рутокеном;
  • вызов функции SCardControl с параметром RUTOKEN_CONTROL_CODE_STOP_NFC;
  • вызов функции SCardDisconnect.

...