Поделиться через


Взаимодействие с библиотекой драйверов смарт-карт

На следующем рисунке показано, как драйвер средства чтения взаимодействует с библиотекой драйверов смарт-карта для обработки запросов IOCTL, получаемых от диспетчера ресурсов:

Схема, иллюстрирующая, как драйвер чтения взаимодействует с библиотекой драйверов смарт-карта для обработки запросов ioctl .

Следующие числа соответствуют числам на предыдущем рисунке. Начиная с цифры 1, на рисунке показаны шаги, которые драйвер чтения должен выполнить (вместе с предоставленной системой библиотекой драйверов) для обработки запроса IOCTL:

  1. Драйвер чтения передает все запросы IOCTL в подпрограмму библиотеки драйверов SmartcardDeviceControl (WDM).

  2. Если параметры, передаваемые драйвером чтения в SmartcardDeviceControl , неверны, функция SmartcardDeviceControl возвращается с сообщением об ошибке. Функция SmartcardDeviceControl возвращается без выполнения запроса IOCTL. В этом случае драйвер чтения должен выполнить запрос IOCTL.

  3. Если параметры допустимы, SmartcardDeviceControl обрабатывает запрос IOCTL, если это возможно.

  4. SmartcardDeviceControl проверяет, определена ли в драйвере чтения подпрограмма обратного вызова для обрабатываемого запроса IOCTL. Если обратный вызов существует, метод SmartcardDeviceControl вызывает его.

  5. Подпрограмма обратного вызова вызывает все подпрограммы библиотеки драйверов, необходимые для завершения обработки запроса IOCTL.

  6. После обработки запроса IOCTL подпрограмма обратного вызова возвращается в SmartcardDeviceControl.

  7. SmartcardDeviceControl завершает IRP, который перевозил IOCTL.

  8. SmartcardDeviceControl возвращает управление в подпрограмму диспетчера читателя и драйвера.

Библиотека смарт-карта синхронизирует доступ к драйверу средства чтения. Одновременно не будут вызываться две функции обратного вызова. Однако обработка событий для вставки и удаления карта должна обрабатываться асинхронно.