Compartilhar via


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

Chamado pela Estrutura Biométrica do Windows para recuperar uma cópia do conjunto de recursos ou modelo processado mais recentemente do mecanismo formatado como uma estrutura de WINBIO_BIR padrão.

Sintaxe

PIBIO_ENGINE_EXPORT_ENGINE_DATA_FN PibioEngineExportEngineDataFn;

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

Parâmetros

[in, out] Pipeline

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

[in] Flags

Um valor que especifica as propriedades da estrutura WINBIO_BIR retornada pelo mecanismo. Isso pode ser um OR bit a bit dos seguintes sinalizadores de nível de segurança e processamento:

WINBIO_DATA_FLAG_PRIVACY

Os dados estão criptografados.

  • WINBIO_DATA_FLAG_INTEGRITY Os dados são assinados digitalmente ou protegidos por um MAC (código de autenticação de mensagem).

  • WINBIO_DATA_FLAG_SIGNED Se esse sinalizador e o sinalizador WINBIO_DATA_FLAG_INTEGRITY estiverem definidos, os dados serão assinados. Se esse sinalizador não estiver definido, mas o sinalizador WINBIO_DATA_FLAG_INTEGRITY estiver definido, um MAC será calculado.

  • WINBIO_DATA_FLAG_RAW Os dados estão no formato com o qual foram capturados.

  • WINBIO_DATA_FLAG_INTERMEDIATE Os dados não são brutos, mas não foram completamente processados.

  • WINBIO_DATA_FLAG_PROCESSED Os dados foram processados.

[out] SampleBuffer

Endereço de uma variável que recebe um ponteiro para uma estrutura WINBIO_BIR que contém o conjunto de recursos ou modelo.

[out] SampleSize

Ponteiro para uma variável que contém o tamanho, em bytes, da estrutura WINBIO_BIR retornada no parâmetro SampleBuffer .

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 adaptador do mecanismo não dá suporte à combinação de sinalizadores especificada pelo parâmetro Flags .
E_OUTOFMEMORY
Não há memória suficiente disponível para criar a estrutura WINBIO_BIR .
E_POINTER
Um parâmetro de ponteiro obrigatório é NULL.
WINBIO_E_INVALID_DEVICE_STATE
O pipeline não contém o tipo de dados exigido pelo parâmetro Flags .
E_NOTIMPL
No momento, esse método não está implementado.

Comentários

Você deve alocar o buffer a ser retornado no parâmetro SampleBuffer do heap de processo usando a função HeapAlloc . Depois que o buffer é criado, ele se torna a propriedade da Estrutura Biométrica do Windows. Como o Framework desaloca essa memória quando termina de usá-la, sua implementação dessa função não deve tentar desalocar o buffer nem salvar um ponteiro para ela. Ao não salvar o ponteiro, você impede que outras partes do adaptador do mecanismo tentem usar o buffer depois que essa função retornar.

Exemplos

O pseudocódigo a seguir mostra uma possível implementação dessa função. O exemplo não é compilado. Você deve adaptá-lo para se adequar à sua finalidade.

//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterExportEngineData
//
// Purpose:
//      Retrieves a copy of the most recently processed feature set or template.
//
// Parameters:
//      Pipeline        - Pointer to a WINBIO_PIPELINE structure associated 
//                        with the biometric unit performing the operation
//      Flags           - Security and processing level flags
//      SampleBuffer    - Contains the feature set or template
//      SampleSize      - Size, in bytes, of the structure returned in the 
//                        SampleBuffer parameter.
//
static HRESULT
WINAPI
EngineAdapterExportEngineData(
    __inout PWINBIO_PIPELINE Pipeline,
    __in WINBIO_BIR_DATA_FLAGS Flags,
    __out PWINBIO_BIR *SampleBuffer,
    __out PSIZE_T SampleSize
    )
{
    HRESULT hr = S_OK;
    PWINBIO_BIR birAddress = NULL;
    SIZE_T birSize = 0;

    // 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_ENGINE_CONTEXT context = 
           (PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;

    // At least one processing level flag must be set. Your adapter can also
    // place additional restrictions on supported export formats.
    if (Flags & (WINBIO_DATA_FLAG_RAW | 
                 WINBIO_DATA_FLAG_INTERMEDIATE | 
                 WINBIO_DATA_FLAG_PROCESSED) == 0)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // You must implement the _CreateBirFromAdapterData function to extract
    // data from the engine context and create a new WINBIO_BIR structure. The
    // function passes ownership of the new biometric information record (BIR)
    // to the EngineAdapterExportEngineData routine which then passes the BIR
    // to the caller.
    hr = _CreateBirFromAdapterData( context, Flags, &birAddress, &birSize);
    if (SUCCEEDED(hr))
    {
        *SampleBuffer = birAddress;
        *SampleSize = birSize;
    }

cleanup:

    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

EngineAdapterAcceptSampleData

Funções de plug-in