PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN Rückruffunktion (winbio_adapter.h)

Wird vom Windows Biometric Framework aufgerufen, um eine Kopie der zuletzt erfassten biometrischen Stichprobe abzurufen, die als Standardstruktur WINBIO_BIR formatiert ist.

Syntax

PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN PibioSensorExportSensorDataFn;

HRESULT PibioSensorExportSensorDataFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [out]     PWINBIO_BIR *SampleBuffer,
  [out]     PSIZE_T SampleSize
)
{...}

Parameter

[in, out] Pipeline

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

[out] SampleBuffer

Adresse einer Variablen, die einen Zeiger auf eine WINBIO_BIR Struktur empfängt, die das Beispiel enthält.

[out] SampleSize

Zeiger auf eine Variable, die die Größe des durch den SampleBuffer-Parameter angegebenen Puffers in Byte empfängt.

Rückgabewert

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

Rückgabecode Beschreibung
E_OUTOFMEMORY
Es ist nicht genügend Arbeitsspeicher verfügbar, um die WINBIO_BIR-Struktur zu erstellen.
E_POINTER
Ein obligatorischer Zeigerparameter ist NULL.
WINBIO_E_INVALID_DEVICE_STATE
Der SensorContext-Member der WINBIO_PIPELINE Struktur, auf die das Argument Pipeline verweist, ist NULL.
WINBIO_E_NO_CAPTURE_DATA
Es sind keine Erfassungsdaten vorhanden.
E_NOTIMPL
Diese Methode ist derzeit nicht implementiert.

Hinweise

Sie müssen den im SampleBuffer-Parameter zurückgegebenen Puffer aus dem Prozessheap zuordnen, indem Sie die HeapAlloc-Funktion verwenden . Nach der Erstellung wird dieser Puffer zur Eigenschaft von Windows Biometric Framework. Da das Framework die Zuordnung dieses Speichers aufgibt, wenn er verwendet wird, darf Ihre Implementierung dieser Funktion nicht versuchen, die Zuordnung des Puffers aufzugeben oder einen Zeiger darauf zu speichern. Indem Sie den Zeiger nicht speichern, verhindern Sie, dass andere Teile des Engine-Adapters versuchen, den Puffer zu verwenden, nachdem diese Funktion zurückgegeben wurde.

Beispiele

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

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterExportSensorData
//
// Purpose:
//      Retrieves a copy of the most recently captured biometric sample.
//      
// Parameters:
//      Pipeline     -  Pointer to a WINBIO_PIPELINE structure associated with 
//                      the biometric unit.
//      SampleBuffer -  Address of a variable that receives a pointer to a 
//                      WINBIO_BIR structure that contains the sample.
//      SampleSize   -  Pointer to a variable that receives the size, in bytes, 
//                      of the buffer specified by the SampleBuffer parameter.
//
static HRESULT
WINAPI
SensorAdapterExportSensorData(
    __inout PWINBIO_PIPELINE Pipeline,
    __out PWINBIO_BIR *SampleBuffer,
    __out SIZE_T *SampleSize
    )
{
    PWINBIO_BIR sampleBuffer = NULL;

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(SampleBuffer) ||
        !ARGUMENT_PRESENT(SampleSize))
    {
        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)
    {
        return WINBIO_E_INVALID_DEVICE_STATE;
    }

    // Determine whether there is capture data to return.
    if (sensorContext->CaptureBuffer == NULL ||
        sensorContext->CaptureBuffer->CaptureData.Size == 0)
    {
        return WINBIO_E_NO_CAPTURE_DATA;
    }

    // Allocate a buffer, copy the data into it, and return
    // the buffer and buffer size to the caller.
    sampleBuffer = _AdapterAlloc(sensorContext->CaptureBuffer->CaptureData.Size);
    if (sampleBuffer == NULL)
    {
        return E_OUTOFMEMORY;
    }
    RtlCopyMemory(
        sampleBuffer, 
        sensorContext->CaptureBuffer->CaptureData.Data,
        sensorContext->CaptureBuffer->CaptureData.Size
        );

    *SampleBuffer = sampleBuffer;
    sampleBuffer = NULL;

    *SampleSize = Pipeline->SensorContext->CaptureBuffer->CaptureData.Size;  

    return S_OK;
}

Anforderungen

   
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 (Winbio_adapter.h einschließen)

Weitere Informationen

Plug-In-Funktionen