PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN función de devolución de llamada (winbio_adapter.h)

Llamado por la función SensorAdapterPushDataToEngine implementada por el adaptador del sensor para notificar al adaptador del motor que acepte una muestra biométrica sin procesar y extraiga un conjunto de características. El conjunto de características se puede usar para buscar coincidencias o inscripciones.

Sintaxis

PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN PibioEngineAcceptSampleDataFn;

HRESULT PibioEngineAcceptSampleDataFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [in]      PWINBIO_BIR SampleBuffer,
  [in]      SIZE_T SampleSize,
  [in]      WINBIO_BIR_PURPOSE Purpose,
  [out]     PWINBIO_REJECT_DETAIL RejectDetail
)
{...}

Parámetros

[in, out] Pipeline

Puntero a una estructura de WINBIO_PIPELINE asociada a la unidad biométrica que realiza la operación.

[in] SampleBuffer

Puntero a una estructura de WINBIO_BIR que contiene la muestra biométrica que se va a procesar.

[in] SampleSize

Valor SIZE_T que contiene el tamaño de la estructura WINBIO_BIR devuelta en el parámetro SampleBuffer .

[in] Purpose

Máscara de bits WINBIO_BIR_PURPOSE que especifica el uso previsto del ejemplo. La estructura WINBIO_BIR_PURPOSE especifica el propósito para el que se van a usar los datos de captura y (como resultado) cómo se debe optimizar. Puede ser un OR bit a bit de los siguientes valores:

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION

[out] RejectDetail

Puntero a un valor de WINBIO_REJECT_DETAIL que recibe información adicional sobre el error al procesar una muestra biométrica. Si la operación se realizó correctamente, este parámetro se establece en cero. Los siguientes valores se definen para ejemplos de huellas digitales:

  • 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

Valor devuelto

Si la función se ejecuta correctamente, devuelve S_OK. Si se produce un error en la función, debe devolver uno de los siguientes valores HRESULT para indicar el error.

Código devuelto Descripción
E_INVALIDARG
El argumento SampleSize no puede ser cero. El argumento Propósito debe ser un OR bit a bit de los valores enumerados en la descripción del parámetro.
E_POINTER
Los argumentos Pipeline, SampleBuffer y RejectDetail no pueden ser NULL.
E_OUTOFMEMORY
No se pudo completar la operación debido a memoria insuficiente.
WINBIO_E_BAD_CAPTURE
No se pudieron procesar los datos para crear el conjunto de características necesario. RejectDetail contiene información adicional sobre el error.

Comentarios

El conjunto de características creado mediante una llamada a esta función se conserva en la canalización de unidades biométricas después de que la función vuelva. Reemplaza cualquier conjunto de características anterior.

La implementación del adaptador de sensor de la función SensorAdapterPushDataToEngine debe usar la siguiente función contenedora (definida en Winbio_adapter.h) para llamar a EngineAdapterAcceptSampleData:

HRESULT WbioEngineAcceptSampleData(
__inout PWINBIO_PIPELINE Pipeline,
__in PWINBIO_BIR SampleBuffer,
__in SIZE_T SampleSize,
__in WINBIO_BIR_PURPOSE Purpose,
__out PWINBIO_REJECT_DETAIL RejectDetail
);

La estructura WINBIO_BIR que se pasa en el parámetro SampleBuffer es la propiedad del adaptador del sensor. Dado que el adaptador del sensor controla la duración del objeto WINBIO_BIR , la función EngineAdapterAcceptSampleData no debe intentar desasignar la estructura ni guardarle un puntero. Al no guardar el puntero, se impide que otras partes del adaptador del motor intenten usar la estructura de WINBIO_BIR después de que la función EngineAdapterAcceptSampleData devuelva.

Si el campo Offset del miembro StandardDataBlock de la estructura de WINBIO_BIR es mayor que cero (lo que indica que el BIR contiene una muestra biométrica en el formato de datos estándar), el campo BiometricDataFormat del miembro HeaderBlock debe establecerse de la siguiente manera:

  • El campo Propietario debe ser WINBIO_ ANSI_381_FORMAT_OWNER.
  • El campo Tipo debe ser WINBIO_ANSI_381_FORMAT_TYPE.
Este es el único formato de datos estándar compatible con Windows Biometric Framework.

Windows Biometric Framework también supone que el miembro HeaderBlock (una estructura WINBIO_BIR_HEADER ) contiene los valores DataFlags y Propósito usados por el adaptador del sensor para capturar la muestra.

Los sensores de huellas digitales que procesan muestras de huellas digitales y rechazan los deslizamientos incorrectos en el adaptador del motor también deben usar valores válidos para WINBIO_BIR_PURPOSE.

Ejemplos

El siguiente pseudocódigo muestra una posible implementación de esta función. El ejemplo no se compila. Debes adaptarlo para que se adapte a tu propósito.

//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterAcceptSampleData
//
// Purpose:
//      Notifies the engine adapter to accept a raw biometric sample and 
//      extract a feature set.
//
// Parameters:
//      Pipeline        - Pointer to a WINBIO_PIPELINE structure associated 
//                        with the biometric unit performing the operation. 
//      SampleBuffer    - Contains the biometric sample to be processed.
//      SampleSize      - Size of the structure returned in the SampleBuffer 
//                        parameter.
//      Purpose         - Specifies the intended use of the sample.
//      RejectDetail    - Receives additional information about the failure, 
//                        if any, to process a biometric sample.
//
static HRESULT
WINAPI
EngineAdapterAcceptSampleData(
    __inout PWINBIO_PIPELINE Pipeline,
    __in PWINBIO_BIR SampleBuffer,
    __in SIZE_T SampleSize,
    __in WINBIO_BIR_PURPOSE Purpose,
    __out PWINBIO_REJECT_DETAIL RejectDetail
    )
{
    HRESULT hr = S_OK;
    PUCHAR featureSet = NULL;

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

    // Retrieve the context from the pipeline.
    PWINBIO_ENGINE_CONTEXT context = 
           (PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;

    // Verify that input arguments are valid.
    if (SampleSize == 0 ||
        Purpose == WINBIO_NO_PURPOSE_AVAILABLE)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // Release any feature set currently attached to the pipeline before
    // creating a new feature set.
    if (context->FeatureSet != NULL)
    {
        _AdapterRelease(context->FeatureSet);
        context->FeatureSet = NULL;
        context->FeatureSetSize = 0;
    }

    // An actual engine adapter would here process the contents of the sample 
    // buffer, generate a feature set suitable for the purpose(s) specified 
    // by the Purpose parameter, and attach the feature set to the pipeline. 
    // The following trivial example, however, creates a feature set simply
    // by making an exact copy of the raw sample.
    // If the sample data cannot be processed, return an HRESULT error code
    // of WINBIO_E_BAD_CAPTURE and set extended error information in the 
    // RejectDetail parameter.
    featureSet = (PUCHAR)_AdapterAlloc(SampleSize);
    if (featureSet == NULL)
    {
        hr = E_OUTOFMEMORY;
        goto cleanup;
    }
    RtlCopyMemory(featureSet, SampleBuffer, SampleSize);
    context->FeatureSet = featureSet;
    featureSet = NULL;
    context->FeatureSetSize = SampleSize;

cleanup:

    if (FAILED(hr))
    {
        if (featureSet != NULL)
        {
            _AdapterRelease(featureSet);
        }
    }

    return hr;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbio_adapter.h (incluya Winbio_adapter.h)

Consulte también

EngineAdapterExportEngineData

Funciones de complemento