생체 인식 IOCTL 호출 시퀀스 지원

WBDI는 Windows 표준 IOCTL 기반 인터페이스입니다. WBDI 드라이버를 작성할 때 필수 IOCTL 집합을 지원해야 합니다. 선택적 IOCTL을 지원하도록 선택할 수도 있습니다. 생체 인식 IOCTL에서 필수 및 선택적 IOCTL의 전체 목록을 찾을 수 있습니다.

공급업체에서 제공하는 WBDI 드라이버는 WBS(Windows 생체 인식 서비스)에서 다음 순서대로 IOCTL 요청을 받을 준비가 되어 있어야 합니다. WudfBioUsbSample의 Device.cpp 이러한 IOCTL에 대한 처리기 예제를 검토할 수 있습니다.

  1. Windows 생체 인식 서비스 또는 센서 어댑터는 생체 인식 디바이스를 초기화하고 사용할 준비가 됐는지 확인합니다. 서비스 또는 어댑터는 IOCTL_BIOMETRIC_GET_ATTRIBUTES 요청을 보냅니다.

    드라이버는 WINBIO_SENSOR_ATTRIBUTES 구조체에 대한 포인터를 받습니다. 이 IOCTL에 대한 처리기에서 드라이버는 이 구조체의 관련 멤버를 채우고 IWDFIoRequest::Complete를 호출하여 요청을 완료해야 합니다.

  2. 다음으로 드라이버는 IOCTL_BIOMETRIC_GET_SENSOR_STATUS 받습니다. 드라이버는 WINBIO_DIAGNOSTICS 구조체의 관련 멤버를 채우고 요청을 완료해야 합니다.

  3. 드라이버가 IOCTL_BIOMETRIC_GET_SENSOR_STATUS 요청에서 반환된 WINBIO_DIAGNOSTICS 구조체의 SensorStatus 멤버에 보정이 필요하다고 표시되면 드라이버는 다음으로 IOCTL_BIOMETRIC_CALIBRATE 요청을 받습니다. 드라이버는 이 IOCTL에 대한 처리기를 제공해야 합니다. 디바이스를 보정한 후 콜백은 WINBIO_CALIBRATION_INFO 구조를 반환해야 합니다.

  4. 이제 드라이버는 IOCTL_BIOMETRIC_CAPTURE_DATA 요청을 받을 것으로 예상할 수 있습니다. 언제든지 하나의 캡처만 보류할 수 있으므로 이 요청의 처리기는 먼저 보류 중인 요청이 없음을 확인해야 합니다. 요청이 보류 중인 경우 WINBIO_E_DATA_COLLECTION_IN_PROGRESS 사용하여 요청을 완료합니다.

    WinBio 서비스 또는 애플리케이션은 CancelIo, CancelIoEx 또는 CancelSynchronousIo와 같은 Win32 취소 루틴을 호출하여 언제든지 미해결 캡처 요청 취소를 요청할 수 있습니다. 따라서 WBDI 드라이버도 취소를 지원해야 합니다.

    드라이버는 IWDFIoRequest::MarkCancelable을 호출하여 IRequestCallbackCancel 인터페이스를 등록하여 취소를 처리합니다.

    그런 다음 처리기는 캡처 모드를 위해 디바이스를 프로그래밍하고 콜백에서 반환합니다. 요청은 취소되거나 드라이버가 캡처가 완료되었음을 감지할 때까지 보류 상태를 유지해야 합니다. 이 I/O 요청이 완료되면 디바이스가 유휴 상태로 돌아갈 수 있습니다. 클라이언트는 실제 캡처에 대한 올바른 버퍼 크기를 확인하기 위해 IOCTL_BIOMETRIC_CAPTURE_DATA 초기 호출을 할 수 있습니다.

  5. IOCTL_BIOMETRIC_RESET 처리기는 디바이스를 알려진 상태 또는 유휴 상태로 물리적으로 다시 설정해야 합니다. 또한 이 요청의 처리기는 보류 중인 데이터 수집 I/O를 취소하고 WINBIO_BLANK_PAYLOAD 구조를 작성해야 합니다. 그런 다음, 처리기가 요청을 완료합니다. 클라이언트는 IOCTL_BIOMETRIC_CAPTURE_DATA 호출 간에 재설정을 호출할 필요가 없습니다.