PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN função de retorno de chamada (winbio_adapter.h)

Chamada pela função SensorAdapterPushDataToEngine implementada pelo adaptador do sensor para notificar o adaptador do mecanismo para aceitar uma amostra biométrica bruta e extrair um conjunto de recursos. O conjunto de recursos pode ser usado para correspondência ou registro.

Sintaxe

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

Ponteiro para uma estrutura WINBIO_PIPELINE associada à unidade biométrica que executa a operação.

[in] SampleBuffer

Ponteiro para uma estrutura WINBIO_BIR que contém o exemplo biométrico a ser processado.

[in] SampleSize

Um valor SIZE_T que contém o tamanho da estrutura WINBIO_BIR retornada no parâmetro SampleBuffer .

[in] Purpose

Uma máscara de bits WINBIO_BIR_PURPOSE que especifica o uso pretendido do exemplo. A estrutura WINBIO_BIR_PURPOSE especifica a finalidade para a qual os dados de captura devem ser usados e (como resultado) como eles devem ser otimizados. Isso pode ser um OR bit a bit dos seguintes valores:

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION

[out] RejectDetail

Um ponteiro para um valor WINBIO_REJECT_DETAIL que recebe informações adicionais sobre a falha ao processar uma amostra biométrica. Se a operação for bem-sucedida, esse parâmetro será definido como zero. Os seguintes valores são definidos para amostras de impressão digital:

  • 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

Retornar valor

Se a função for bem-sucedida, ela retornará S_OK. Se a função falhar, ela deverá retornar um dos seguintes valores HRESULT para indicar o erro.

Código de retorno Descrição
E_INVALIDARG
O argumento SampleSize não pode ser zero. O argumento Purpose deve ser um OR bit a bit dos valores listados na descrição do parâmetro.
E_POINTER
Os argumentos Pipeline, SampleBuffer e RejectDetail não podem ser NULL.
E_OUTOFMEMORY
A operação não pôde ser concluída devido à memória insuficiente.
WINBIO_E_BAD_CAPTURE
Não foi possível processar os dados para criar o conjunto de recursos necessário. RejectDetail contém informações adicionais sobre a falha.

Comentários

O conjunto de recursos criado chamando essa função é mantido no pipeline de unidade biométrica após o retorno da função. Ele substitui qualquer conjunto de recursos anterior.

A implementação do adaptador de sensor da função SensorAdapterPushDataToEngine deve usar a seguinte função wrapper (definida em Winbio_adapter.h) para chamar 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
);

A estrutura WINBIO_BIR passada no parâmetro SampleBuffer é a propriedade do adaptador do sensor. Como o adaptador do sensor controla o tempo de vida do objeto WINBIO_BIR , a função EngineAdapterAcceptSampleData não deve tentar desalocar a estrutura nem salvar um ponteiro nela. Ao não salvar o ponteiro, você impede que outras partes do adaptador do mecanismo tentem usar a estrutura WINBIO_BIR depois que a função EngineAdapterAcceptSampleData retornar.

Se o campo Deslocamento do membro StandardDataBlock da estrutura WINBIO_BIR for maior que zero (indicando que o BIR contém uma amostra biométrica no formato de dados padrão), o campo BiometricDataFormat do membro HeaderBlock deverá ser definido da seguinte maneira:

  • O campo Proprietário deve ser WINBIO_ ANSI_381_FORMAT_OWNER.
  • O campo Tipo deve ser WINBIO_ANSI_381_FORMAT_TYPE.
Esse é o único formato de dados padrão compatível com a Estrutura Biométrica do Windows.

A Estrutura Biométrica do Windows também pressupõe que o membro HeaderBlock (uma estrutura WINBIO_BIR_HEADER ) contenha os valores DataFlags e Purpose usados pelo adaptador do sensor para capturar o exemplo.

Sensores de impressão digital que processam amostras de impressão digital e rejeitam deslizes inválidos no Adaptador de Mecanismo também devem usar valores válidos para WINBIO_BIR_PURPOSE.

Exemplos

O pseudocódigo a seguir mostra uma implementação possível dessa função. O exemplo não é compilado. Você deve adaptá-lo para se adequar ao seu 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 Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winbio_adapter.h (inclua Winbio_adapter.h)

Confira também

EngineAdapterExportEngineData

Funções de plug-in