生体認証 IOCTL 呼び出しシーケンスのサポート
WBDI は、Windows 標準の IOCTL ベースのインターフェイスです。 WBDI ドライバーを作成する場合は、必須の IOCTL のセットをサポートする必要があります。 さらに、オプションの IOCTL のサポートを選択することもできます。 必須およびオプションの IOCTL の完全な一覧については、生体認証 IOCTLsを参照してください。
ベンダー提供の WBDI ドライバーは、Windows 生体認証サービス (WBS) から次の順序で IOCTL 要求を受信できるように準備する必要があります。 これらの IOCTL のハンドラーの例は、WudfBioUsbSampleでDevice.cpp確認できます。
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 要求を受信することが期待できます。 保留状態にできるキャプチャは常に 1 つだけであるため、このリクエストのハンドラーはまず保留中のリクエストがないことを確認する必要があります。 リクエストが保留中の場合は、WINBIO_E_DATA_COLLECTION_IN_PROGRESS を使用してリクエストを完了します。
WinBio サービスまたはアプリケーションは、CancelIo、CancelIoEx、CancelSynchronousIo などの Win32 キャンセル ルーチンを呼び出すことで、未処理のキャプチャ要求の取り消しをいつでも要求できます。 そのため、WBDI ドライバーはキャンセルもサポートする必要があります。
ドライバーは、IWDFIoRequest::MarkCancelable を呼び出して IRequestCallbackCancel インターフェイスを登録することで、取り消しを処理します。
次に、ハンドラーはデバイスをキャプチャ モードにプログラムし、コールバックから戻ります。 リクエストは、キャンセルされるか、ドライバーがキャプチャの完了を検出するまで保留状態のままでなければなりません。 この I/O リクエストが完了すると、デバイスはアイドル状態に戻ることができます。 クライアントは、IOCTL_BIOMETRIC_CAPTURE_DATA への最初の呼び出しを行って、実際のキャプチャの正しいバッファ サイズを決定することがあります。
IOCTL_BIOMETRIC_RESET のハンドラーは、デバイスを既知の状態またはアイドル状態に物理的にリセットする必要があります。 また、この要求のハンドラーは、保留中のデータ収集 I/O を取り消し、WINBIO_BLANK_PAYLOAD 構造体に入力する必要があります。 その後、ハンドラーはリクエストを完了します。 クライアントは、IOCTL_BIOMETRIC_CAPTURE_DATA の呼び出しの間にリセットを呼び出す必要はありません。