Unterstützen der biometrischen IOCTL-Anrufsequenz
WBDI ist eine IOCTL-basierte Windows-Standardschnittstelle. Wenn Sie einen WBDI-Treiber schreiben, müssen Sie eine Reihe obligatorischer IOCTLs unterstützen. Darüber hinaus können Sie optionale IOCTLs unterstützen. Eine vollständige Liste der obligatorischen und optionalen IOCTLs finden Sie in biometrischen IOCTLs.
Ein vom Anbieter bereitgestellter WBDI-Treiber sollte darauf vorbereitet sein, IOCTL-Anforderungen in der folgenden Reihenfolge vom Windows-Biometrischen Dienst (WBS) zu erhalten. Sie können Beispiele für Handler für diese IOCTLs in Device.cpp in WudfBioUsbSample überprüfen.
Der Windows-Biometrische Dienst oder der Sensoradapter initialisiert das biometrische Gerät und überprüft, ob es einsatzbereit ist. Der Dienst oder Adapter sendet eine IOCTL_BIOMETRIC_GET_ATTRIBUTES Anforderung.
Der Treiber empfängt einen Zeiger auf eine WINBIO_SENSOR_ATTRIBUTES Struktur. Im Handler für diese IOCTL sollte der Treiber die relevanten Member dieser Struktur ausfüllen und die Anforderung durch Aufrufen von IWDFIoRequest::Complete abschließen.
Als Nächstes erhält der Treiber IOCTL_BIOMETRIC_GET_SENSOR_STATUS. Der Treiber sollte die relevanten Elemente der WINBIO_DIAGNOSTICS Struktur ausfüllen und die Anforderung abschließen.
Wenn der Treiber angibt, dass die Kalibrierung im SensorStatus-Element der WINBIO_DIAGNOSTICS Struktur erforderlich ist, die von der IOCTL_BIOMETRIC_GET_SENSOR_STATUS Anforderung zurückgegeben wurde, erhält der Treiber als Nächstes eine IOCTL_BIOMETRIC_CALIBRATE Anforderung. Der Treiber muss einen Handler für diese IOCTL bereitstellen. Nach der Kalibrierung des Geräts sollte der Rückruf eine WINBIO_CALIBRATION_INFO Struktur zurückgeben.
Der Treiber kann jetzt erwarten, dass IOCTL_BIOMETRIC_CAPTURE_DATA Anforderungen empfangen werden. Da immer nur eine Erfassung ausstehen kann, sollte der Handler für diese Anforderung zuerst bestätigen, dass keine Anforderung aussteht. Wenn eine Anforderung aussteht, füllen Sie die Anforderung mit WINBIO_E_DATA_COLLECTION_IN_PROGRESS aus.
Der WinBio-Dienst oder eine Anwendung kann jederzeit den Abbruch einer ausstehenden Aufnahmeanforderung anfordern, indem Win32-Abbruchroutinen wie CancelIo, CancelIoEx oder CancelSynchronousIo aufgerufen werden. Daher müssen WBDI-Treiber auch den Abbruch unterstützen.
Der Treiber verarbeitet den Abbruch durch Aufrufen von IWDFIoRequest::MarkCancelable zum Registrieren einer IRequestCallbackCancel-Schnittstelle.
Der Handler programmiert dann das Gerät für den Aufnahmemodus und gibt aus dem Rückruf zurück. Die Anforderung sollte bis zum Abbrechen ausstehen, oder der Treiber erkennt, dass die Erfassung abgeschlossen ist. Nachdem diese E/A-Anforderung abgeschlossen wurde, kann das Gerät in einen Leerlaufzustand zurückkehren. Ein Client ruft möglicherweise zunächst IOCTL_BIOMETRIC_CAPTURE_DATA auf, um die richtige Puffergröße für eine tatsächliche Erfassung zu ermitteln.
Der Handler für IOCTL_BIOMETRIC_RESET sollte das Gerät physisch auf einen bekannten oder leerlaufzustand zurücksetzen. Der Handler für diese Anforderung muss auch alle ausstehenden Datensammlungs-E/A abbrechen und die WINBIO_BLANK_PAYLOAD Struktur ausfüllen. Der Handler schließt dann die Anforderung ab. Clients müssen nicht zwischen Anrufen auf IOCTL_BIOMETRIC_CAPTURE_DATA zurückgesetzt werden.