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


Поддержка биометрической последовательности вызовов IOCTL

WBDI — это стандартный интерфейс windows на основе IOCTL. При написании драйвера WBDI необходимо поддерживать набор обязательных ioCTL. Кроме того, можно выбрать поддержку необязательных списков IOCTL. Полный список обязательных и необязательных ioCTLs см. в разделе Биометрические ioCTLs.

Драйвер WBDI, предоставляемый поставщиком, должен быть подготовлен к получению запросов IOCTL в следующем порядке от биометрической службы Windows (WBS). Примеры обработчиков для этих ioCTL можно просмотреть в Device.cpp в WudfBioUsbSample.

  1. Биометрическая служба Windows или адаптер датчика инициализирует биометрическое устройство и проверяет его готовность к использованию. Служба или адаптер отправляет запрос IOCTL_BIOMETRIC_GET_ATTRIBUTES .

    Драйвер получает указатель на структуру WINBIO_SENSOR_ATTRIBUTES . В обработчике для этого IOCTL драйвер должен заполнить соответствующие элементы этой структуры и выполнить запрос, вызвав IWDFIoRequest::Complete.

  2. Затем драйвер получает IOCTL_BIOMETRIC_GET_SENSOR_STATUS. Драйвер должен заполнить соответствующие элементы структуры WINBIO_DIAGNOSTICS и выполнить запрос.

  3. Если драйвер указывает, что требуется калибровка в элементе SensorStatusструктуры WINBIO_DIAGNOSTICS , возвращенной из запроса IOCTL_BIOMETRIC_GET_SENSOR_STATUS, драйвер затем получает запрос IOCTL_BIOMETRIC_CALIBRATE . Драйвер должен предоставить обработчик для этого IOCTL. После калибровки устройства обратный вызов должен вернуть WINBIO_CALIBRATION_INFO структуру.

  4. Теперь драйвер может ожидать получения IOCTL_BIOMETRIC_CAPTURE_DATA запросов. Так как в любой момент времени может быть ожидание только одного захвата, обработчик для этого запроса должен сначала подтвердить, что запрос не находится в состоянии ожидания. Если запрос находится в состоянии ожидания, заполните его с помощью WINBIO_E_DATA_COLLECTION_IN_PROGRESS.

    Служба WinBio или приложение может в любое время запросить отмену незавершенного запроса на захват, вызвав процедуры отмены Win32, такие как CancelIo, CancelIoEx или CancelSynchronousIo. Таким образом, драйверы WBDI также должны поддерживать отмену.

    Драйвер обрабатывает отмену, вызывая IWDFIoRequest::MarkCancelable для регистрации интерфейса IRequestCallbackCancel .

    Затем обработчик программировать устройство в режиме записи и возвращается из обратного вызова. Запрос должен оставаться в ожидании до тех пор, пока он не будет отменен или драйвер не обнаружит, что запись завершена. После завершения этого запроса ввода-вывода устройство может вернуться в состояние простоя. Клиент может выполнить первоначальный вызов IOCTL_BIOMETRIC_CAPTURE_DATA, чтобы определить правильный размер буфера для фактического захвата.

  5. Обработчик для IOCTL_BIOMETRIC_RESET должен физически сбросить устройство в известное или простое состояние. Обработчик для этого запроса также должен отменить все ожидающие операции ввода-вывода данных и заполнить структуру WINBIO_BLANK_PAYLOAD . Затем обработчик завершает запрос. Клиентам не нужно вызывать сброс между вызовами IOCTL_BIOMETRIC_CAPTURE_DATA.