支持生物识别 IOCTL 调用序列
WBDI 是基于 Windows 标准 IOCTL 的接口。 编写 WBDI 驱动程序时,必须支持一组必需的 IOCTL。 还可以选择支持可选 IOCTL。 可以在生物识别 IOCTL 中找到必需和可选 IOCTL 的完整列表。
供应商提供的 WBDI 驱动程序应准备好从 Windows 生物识别服务 (WBS) 按以下顺序接收 IOCTL 请求。 可以在 WudfBioUsbSample 的 Device.cpp 中查看这些 IOCTL 的处理程序示例。
Windows 生物识别服务或传感器适配器会初始化生物识别设备,并验证其是否已可供使用。 服务或适配器发送 IOCTL_BIOMETRIC_GET_ATTRIBUTES 请求。
驱动程序接收指向 WINBIO_SENSOR_ATTRIBUTES 结构的指针。 在此 IOCTL 的处理程序中,驱动程序应填写此结构的相关成员,并通过调用 IWDFIoRequest::Complete 来完成请求。
接下来,驱动程序将接收 IOCTL_BIOMETRIC_GET_SENSOR_STATUS。 驱动程序应填写 WINBIO_DIAGNOSTICS 结构的相关成员并完成请求。
如果驱动程序指示在从 IOCTL_BIOMETRIC_GET_SENSOR_STATUS 请求返回的 WINBIO_DIAGNOSTICS 结构的 SensorStatus 成员中需要校准,驱动程序接下来会收到 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 接口来处理取消。
然后处理程序将设备编程为捕获模式,并从回调返回。 请求应保持挂起状态,直到取消或驱动程序检测到捕获已完成。 完成此 I/O 请求后,设备可以返回到空闲状态。 客户端可能会对 IOCTL_BIOMETRIC_CAPTURE_DATA 进行初始调用,以确定实际捕获的正确缓冲区大小。
IOCTL_BIOMETRIC_RESET 的处理程序应以物理方式将设备重置为已知或空闲状态。 此请求的处理程序还必须取消任何挂起的数据收集 I/O,并填写 WINBIO_BLANK_PAYLOAD 结构。 然后,处理程序完成请求。 客户端不需要在 IOCTL_BIOMETRIC_CAPTURE_DATA 调用之间调用重置。