PIBIO_SENSOR_PUSH_DATA_TO_ENGINE_FN Rückruffunktion (winbio_adapter.h)

Wird vom Windows Biometric Framework aufgerufen, um den aktuellen Inhalt des Beispielpuffers für den Moduladapter verfügbar zu machen.

Syntax

PIBIO_SENSOR_PUSH_DATA_TO_ENGINE_FN PibioSensorPushDataToEngineFn;

HRESULT PibioSensorPushDataToEngineFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [in]      WINBIO_BIR_PURPOSE Purpose,
  [in]      WINBIO_BIR_DATA_FLAGS Flags,
  [out]     PWINBIO_REJECT_DETAIL RejectDetail
)
{...}

Parameter

[in, out] Pipeline

Zeiger auf die WINBIO_PIPELINE Struktur, die der biometrischen Einheit zugeordnet ist, die den Vorgang ausführt.

[in] Purpose

Ein Wert, der die Eigenschaften der WINBIO_BIR-Struktur angibt, die an die Engine übergeben wird. Dies kann ein bitweiser OR der folgenden Flags für Sicherheits- und Verarbeitungsebene sein:

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION

[in] Flags

Ein Wert, der das Format des Beispiels angibt. Dies kann ein bitweiser OR der folgenden Flags für Sicherheits- und Verarbeitungsebene sein:

  • WINBIO_DATA_FLAG_PRIVACY

Das Beispiel sollte verschlüsselt sein.

  • WINBIO_DATA_FLAG_INTEGRITY

Das Beispiel sollte digital signiert oder durch einen Nachrichtenauthentifizierungscode (MAC) geschützt werden.

  • WINBIO_DATA_FLAG_SIGNED

Wenn dieses Flag und das WINBIO_DATA_FLAG_INTEGRITY-Flag festgelegt sind, sollte das Beispiel signiert werden. Wenn dieses Flag nicht festgelegt ist, aber das WINBIO_DATA_FLAG_INTEGRITY-Flag festgelegt ist, sollte ein MAC berechnet werden.

  • WINBIO_DATA_FLAG_RAW

Das Beispiel sollte im WINBIO_BIR -Objekt in dem Format platziert werden, in dem es erfasst wurde.

[out] RejectDetail

Ein Zeiger auf einen WINBIO_REJECT_DETAIL Wert, der Informationen über den vorherigen Fehler bei der Erfassung einer biometrischen Stichprobe und damit den Grund enthält, warum der Stichprobenpuffer leer ist. Wenn eine frühere Erfassung erfolgreich war, wird dieser Parameter auf 0 festgelegt. Die folgenden Werte werden für die Fingerabdruckerfassung definiert:

  • WINBIO_FP_TOO_HIGH
  • WINBIO_FP_TOO_LOW
  • WINBIO_FP_TOO_LEFT
  • WINBIO_FP_TOO_RIGHT
  • WINBIO_FP_TOO_FAST
  • WINBIO_FP_TOO_SLOW
  • WINBIO_FP_POOR_QUALITY
  • WINBIO_FP_TOO_SKEWED
  • WINBIO_FP_TOO_SHORT
  • WINBIO_FP_MERGE_FAILURE

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt sie S_OK zurück. Wenn die Funktion fehlschlägt, muss sie einen der folgenden HRESULT-Werte zurückgeben, um den Fehler anzugeben.

Rückgabecode Beschreibung
E_POINTER
Ein obligatorisches Zeigerargument ist NULL.
WINBIO_E_BAD_CAPTURE
Die Beispieldaten sind nicht für die Verwendung geeignet. Wenn Sie diesen Fehlercode zurückgeben, müssen Sie auch einen Wert im RejectDetail-Parameter angeben, um die Art des Problems anzugeben.
WINBIO_E_INVALID_DEVICE_STATE
Das SensorContext-Element der WINBIO_PIPELINE Struktur, auf die das Pipelineargument verweist, ist NULL.
WINBIO_E_NO_CAPTURE_DATA
Es sind keine Erfassungsdaten vorhanden.

Hinweise

Ihre Implementierung dieser Funktion sollte Rohdaten, die im Beispielpuffer enthalten sind, in eine Standardstruktur WINBIO_BIR konvertieren und diese Struktur mithilfe der EngineAdapterAcceptSampleData-Funktion pushen . Dazu rufen Sie die in Winbio_adapter.h-Headerdatei definierte Hilfsfunktion WbioEngineAcceptSampleData auf.

Wenn die EngineAdapterAcceptSampleData-Funktion WINBIO_E_BAD_CAPTURE zurückgibt, sollte Ihre Implementierung von SensorAdapterPushDataToEngine den RejectDetail-Wert zurückgeben, der vom Engineadapter weitergegeben wird.

Der Sensoradapter behält den Besitz des An EngineAdapterAcceptSampleData übergebenen Beispielpuffers. Der Sensoradapter ist dafür verantwortlich, diesen Puffer irgendwann nach der Rückgabe von EngineAdapterAcceptSampleData freizugeben.

Beispiele

Der folgende Pseudocode zeigt eine mögliche Implementierung dieser Funktion. Das Beispiel wird nicht kompiliert. Sie müssen es an Ihren Zweck anpassen.

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterPushDataToEngine
//
// Purpose:
//      Makes the current contents of the sample buffer available to the 
//      engine adapter.
//      
// Parameters:
//      Pipeline     -  Pointer to a WINBIO_PIPELINE structure associated with 
//                      the biometric unit.
//      Purpose      -  Specifies the properties of the WINBIO_BIR structure 
//                      that will be passed to the engine.
//      Flags        -  A value that specifies the format of the sample.
//      RejectDetail -  Pointer to a WINBIO_REJECT_DETAIL value that receives 
//                      additional information about the reason the sample
//                      buffer is empty.
//
static HRESULT
WINAPI
SensorAdapterPushDataToEngine(
    __inout PWINBIO_PIPELINE Pipeline,
    __in WINBIO_BIR_PURPOSE Purpose,
    __in WINBIO_BIR_DATA_FLAGS Flags,
    __out PWINBIO_REJECT_DETAIL RejectDetail
    )
{
    HRESULT hr = S_OK;

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(RejectDetail))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Retrieve the context from the pipeline.
    PWINBIO_SENSOR_CONTEXT sensorContext = 
                 (PWINBIO_SENSOR_CONTEXT)Pipeline->SensorContext;

    // Verify the state of the pipeline.
    if (sensorContext == NULL)
    {
        hr = WINBIO_E_INVALID_DEVICE_STATE;
        goto cleanup;
    }

    if (sensorContext->CaptureBuffer != NULL &&
        sensorContext->CaptureBufferSize >= sizeof (WINBIO_CAPTURE_DATA) &&
        sensorContext->CaptureBuffer->CaptureData.Size != 0 &&
        sensorContext->CaptureBuffer->SensorStatus == WINBIO_SENSOR_ACCEPT)
    {
        // There is valid capture data in the Pipeline. Call the 
        // WbioEngineAcceptSampleData function to notify the engine adapter, but
        // retain ownership of the buffer in the sensor adapter. 
        // WbioEngineAcceptSampleData is a wrapper function declared in the
        // Winbio_adapter.h header file.
        hr = WbioEngineAcceptSampleData(
                    Pipeline,
                    (PWINBIO_BIR)sensorContext->CaptureBuffer->CaptureData.Data,
                    sensorContext->CaptureBuffer->CaptureData.Size,
                    Purpose,
                    RejectDetail
                    );
    }
    else if (sensorContext->CaptureBuffer != NULL &&
             sensorContext->CaptureBufferSize >= sizeof (WINBIO_CAPTURE_DATA) &&
             sensorContext->CaptureBuffer->WinBioHresult == WINBIO_E_BAD_CAPTURE)
    {
        // The most recent capture was not acceptable.  Do not attempt to push 
        // the sample to the engine. Instead, simply return the reject detail
        // information generated by the previous capture.
        hr = sensorContext->CaptureBuffer->WinBioHresult;
        *RejectDetail = sensorContext->CaptureBuffer->RejectDetail;
    }
    else
    {
        hr = WINBIO_E_NO_CAPTURE_DATA;
    }

    return hr;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winbio_adapter.h (einschließlich Winbio_adapter.h)

Weitere Informationen

Plug-In-Funktionen