Função WinBioCaptureSample (winbio.h)
Captura um exemplo biométrico e preenche um BIR (registro de informações biométricas) com os dados brutos ou processados.
Sintaxe
HRESULT WinBioCaptureSample(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_BIR_PURPOSE Purpose,
[in] WINBIO_BIR_DATA_FLAGS Flags,
[out, optional] WINBIO_UNIT_ID *UnitId,
PWINBIO_BIR *Sample,
[out, optional] SIZE_T *SampleSize,
[out, optional] WINBIO_REJECT_DETAIL *RejectDetail
);
Parâmetros
[in] SessionHandle
Um valor WINBIO_SESSION_HANDLE que identifica uma sessão biométrica aberta. Abra um identificador de sessão síncrona chamando WinBioOpenSession. Abra um identificador de sessão assíncrono chamando WinBioAsyncOpenSession.
[in] Purpose
Uma máscara de bits WINBIO_BIR_PURPOSE que especifica o uso pretendido do exemplo. 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
[in] Flags
Um valor que especifica o tipo de processamento a ser aplicado ao exemplo capturado. Isso pode ser um OR bit a bit dos seguintes sinalizadores de nível de segurança e processamento:
- WINBIO_DATA_FLAG_PRIVACY
Criptografe o exemplo.
- WINBIO_DATA_FLAG_INTEGRITY
Assine o exemplo ou proteja-o usando 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, assine o exemplo. Se esse sinalizador não estiver definido, mas o sinalizador WINBIO_DATA_FLAG_INTEGRITY estiver definido, compute um MAC.
- WINBIO_DATA_FLAG_RAW
Retorne o exemplo exatamente como foi capturado pelo sensor.
- WINBIO_DATA_FLAG_INTERMEDIATE
Retorne o exemplo depois de ter sido limpo e filtrado.
- WINBIO_DATA_FLAG_PROCESSED
Retorne o exemplo depois que ele estiver pronto para ser usado para a finalidade especificada pelo parâmetro Purpose.
[out, optional] UnitId
Um ponteiro para um valor WINBIO_UNIT_ID que contém a ID da unidade biométrica que gerou a amostra.
Sample
Endereço de uma variável que recebe um ponteiro para uma estrutura WINBIO_BIR que contém o exemplo. Quando terminar de usar a estrutura, você deverá passar o ponteiro para WinBioFree para liberar a memória alocada para o exemplo.
[out, optional] SampleSize
Um ponteiro para um valor SIZE_T que contém o tamanho, em bytes, da estrutura WINBIO_BIR retornada no parâmetro Sample .
[out, optional] RejectDetail
Um ponteiro para um valor WINBIO_REJECT_DETAIL que contém informações adicionais sobre a falha na captura de uma amostra biométrica. Se a captura tiver sido bem-sucedida, esse parâmetro será definido como zero. Os seguintes valores são definidos para captura 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
Valor retornado
Se a função for bem-sucedida, ela retornará S_OK. Se a função falhar, ela retornará um valor HRESULT que indica o erro. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.
Código de retorno | Descrição |
---|---|
|
O chamador não tem permissão para capturar amostras brutas ou a sessão não foi aberta usando o sinalizador WINBIO_FLAG_RAW . |
|
O identificador de sessão não é válido. |
|
A unidade biométrica não dá suporte à operação solicitada. |
|
Os ponteiros UnitId, Sample, SampleSize e RejectDetail não podem ser NULL. |
|
A operação não pôde ser concluída porque a unidade biométrica está sendo usada no momento para uma transação de registro (somente pool do sistema). |
|
A operação não pôde ser concluída porque um sensor seguro está presente no pool de sensores. |
Comentários
Para chamar essa função com êxito, você deve abrir o identificador de sessão especificando WINBIO_FLAG_RAW no parâmetro Flags das funções WinBioOpenSession ou WinBioAsyncOpenSession . Atualmente, somente os aplicativos em execução nas contas Administradores e Sistema Local têm os privilégios necessários.
Combinações válidas dos parâmetros Purpose e Flags dependem dos recursos da unidade biométrica que está sendo usada. Consulte a documentação do sensor do fornecedor para determinar quais combinações de valores de Uso e Sinalizadores válidos têm suporte e como eles afetam os dados capturados. Depois que você terminar de usar o exemplo, seu aplicativo deverá chamar WinBioFree para liberar a memória alocada para ele pela função WinBioCaptureSample .
Para usar WinBioCaptureSample de forma síncrona, chame a função com um identificador de sessão criado chamando WinBioOpenSession. A função é bloqueada até que um exemplo seja capturado ou que um erro seja encontrado. As chamadas para WinBioCaptureSample usando o pool do sistema serão bloqueadas até que o aplicativo de chamada tenha o foco da janela e o usuário forneça um exemplo para um dos sensores no pool. Se o sensor escolhido pelo usuário já estiver sendo usado para uma transação de registro, a função falhará e retornará WINBIO_E_ENROLLMENT_IN_PROGRESS.
Para usar WinBioCaptureSample de forma assíncrona, chame a função com um identificador de sessão criado chamando WinBioAsyncOpenSession. A estrutura aloca uma estrutura WINBIO_ASYNC_RESULT e a usa para retornar informações sobre êxito ou falha da operação. Se a operação de captura for bem-sucedida, a estrutura retornará informações sobre o exemplo em uma estrutura aninhada do CaptureSample . Se a operação não for bem-sucedida, a estrutura retornará informações de erro. A estrutura WINBIO_ASYNC_RESULT é retornada para o retorno de chamada do aplicativo ou para a fila de mensagens do aplicativo, dependendo do valor definido no parâmetro NotificationMethod da função WinBioAsyncOpenSession :
- Se você optar por receber avisos de conclusão usando um retorno de chamada, deverá implementar uma função PWINBIO_ASYNC_COMPLETION_CALLBACK e definir o parâmetro NotificationMethod como WINBIO_ASYNC_NOTIFY_CALLBACK.
- Se você optar por receber avisos de conclusão usando a fila de mensagens do aplicativo, deverá definir o parâmetro NotificationMethod como WINBIO_ASYNC_NOTIFY_MESSAGE. A estrutura retorna um ponteiro WINBIO_ASYNC_RESULT para o campo LPARAM da mensagem de janela.
Windows 7: Você pode executar essa operação de forma assíncrona usando a função WinBioCaptureSampleWithCallback . A função verifica os argumentos de entrada e retorna imediatamente. Se os argumentos de entrada não forem válidos, a função retornará um código de erro. Caso contrário, a estrutura iniciará a operação em outro thread. Quando a operação assíncrona é concluída ou encontra um erro, a estrutura envia os resultados para a função PWINBIO_CAPTURE_CALLBACK implementada pelo aplicativo.
Exemplos
A função a seguir chama WinBioCaptureSample para capturar um exemplo biométrico de um usuário. Link para a biblioteca estática Winbio.lib e inclua os seguintes arquivos de cabeçalho:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT CaptureSample()
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
PWINBIO_BIR sample = NULL;
SIZE_T sampleSize = 0;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Access: Capture raw data
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
WINBIO_DB_DEFAULT, // Default database
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioOpenSession failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Capture a biometric sample.
wprintf_s(L"\n Calling WinBioCaptureSample - Swipe sensor...\n");
hr = WinBioCaptureSample(
sessionHandle,
WINBIO_NO_PURPOSE_AVAILABLE,
WINBIO_DATA_FLAG_RAW,
&unitId,
&sample,
&sampleSize,
&rejectDetail
);
if (FAILED(hr))
{
if (hr == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", rejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSample failed. hr = 0x%x\n", hr);
}
goto e_Exit;
}
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
wprintf_s(L"\n Captured %d bytes.\n", sampleSize);
e_Exit:
if (sample != NULL)
{
WinBioFree(sample);
sample = NULL;
}
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
Requisitos
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.h (inclua Winbio.h) |
Biblioteca | Winbio.lib |
DLL | Winbio.dll |