Поддержка последовательности вызовов биометрических IOCTL
WBDI — это стандартный интерфейс на основе IOCTL Windows. При написании драйвера WBDI необходимо поддерживать набор обязательных операций ввода-вывода. Кроме того, вы можете выбрать поддержку необязательных операций ввода-вывода. Полный список обязательных и необязательных ioCTLs можно найти в биометрических ioCTLs.
Предоставленный поставщиком драйвер WBDI должен быть готов к получению запросов IOCTL в следующем порядке из биометрической службы Windows (WBS). Примеры обработчиков для этих операций ввода-вывода можно просмотреть в Device.cpp в WudfBioUsbSample.
Биометрические службы Windows или адаптер датчика инициализирует биометрическое устройство и проверяет, готов ли он к использованию. Служба или адаптер отправляет запрос IOCTL_BIOMETRIC_GET_ATTRIBUTES.
Драйвер получает указатель на структуру WINBIO_SENSOR_ATTRIBUTES . В обработчике для этого IOCTL драйвер должен заполнить соответствующие члены этой структуры и завершить запрос, вызвав IWDFIoRequest::Complete.
Затем драйвер получает IOCTL_BIOMETRIC_GET_SENSOR_STATUS. Драйвер должен заполнить соответствующие члены структуры WINBIO_DIAGNOSTICS и завершить запрос.
Если драйвер указывает, что калибровка необходима в элементе SensorStatus структуры WINBIO_DIAGNOSTICS, возвращенной из запроса IOCTL_BIOMETRIC_GET_SENSOR_STATUS, драйвер следующий получает запрос IOCTL_BIOMETRIC_CALIBRATE. Драйвер должен предоставить обработчик для этого IOCTL. После калибровки устройства обратный вызов должен вернуть WINBIO_CALIBRATION_INFO структуру.
Теперь драйвер может ожидать получения IOCTL_BIOMETRIC_CAPTURE_DATA запросов. Так как только одна запись может находиться в ожидании в любое время, обработчик этого запроса сначала должен подтвердить, что запрос не ожидается. Если запрос ожидается, завершите запрос WINBIO_E_DATA_COLLECTION_IN_PROGRESS.
Служба WinBio или приложение может запрашивать отмену незавершенного запроса записи в любое время путем вызова подпрограмм отмены Win32, таких как CancelIo, CancelIoEx или CancelSynchronousIo. Таким образом, драйверы WBDI также должны поддерживать отмену.
Драйвер обрабатывает отмену путем вызова IWDFIoRequest::MarkCancelable для регистрации интерфейса IRequestCallbackCancel .
Затем обработчик программировать устройство для режима записи и возвращается из обратного вызова. Запрос должен оставаться в ожидании до отмены или драйвер обнаружит, что запись завершена. После завершения этого запроса ввода-вывода устройство может вернуться в состояние простоя. Клиент может выполнить первоначальный вызов IOCTL_BIOMETRIC_CAPTURE_DATA, чтобы определить правильный размер буфера для фактического захвата.
Обработчик для IOCTL_BIOMETRIC_RESET должен физически сбросить устройство в известное или неактивное состояние. Обработчик для этого запроса также должен отменить все ожидающие операции ввода-вывода и заполнить структуру WINBIO_BLANK_PAYLOAD . Затем обработчик завершает запрос. Клиентам не нужно вызывать сброс между вызовами IOCTL_BIOMETRIC_CAPTURE_DATA.