Función WinBioCaptureSampleWithCallback (winbio.h)
Captura una muestra biométrica de forma asincrónica y devuelve los datos sin procesar o procesados en un registro de información biométrica (BIR). La función vuelve inmediatamente al autor de la llamada, captura el ejemplo en un subproceso independiente y llama a una función de devolución de llamada definida por la aplicación para actualizar el estado de la operación.
Se recomienda que, a partir de Windows 8, ya no use esta función para iniciar una operación asincrónica. En su lugar, haga lo siguiente:
- Implemente una función de PWINBIO_ASYNC_COMPLETION_CALLBACK para recibir aviso cuando se complete la operación.
- Llame a la función WinBioAsyncOpenSession . Pase la dirección de la devolución de llamada en el parámetro CallbackRoutine . Pase WINBIO_ASYNC_NOTIFY_CALLBACK en el parámetro NotificationMethod . Recupere un identificador de sesión asincrónico.
- Use el identificador de sesión asincrónico para llamar a WinBioCaptureSample. Cuando finalice la operación, Windows Biometric Framework asignará e inicializará una estructura de WINBIO_ASYNC_RESULT con los resultados e invocará la devolución de llamada con un puntero a la estructura de resultados.
- Llame a WinBioFree desde la implementación de devolución de llamada para liberar la estructura de WINBIO_ASYNC_RESULT una vez que haya terminado de usarlo.
Sintaxis
HRESULT WinBioCaptureSampleWithCallback(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_BIR_PURPOSE Purpose,
[in] WINBIO_BIR_DATA_FLAGS Flags,
[in] PWINBIO_CAPTURE_CALLBACK CaptureCallback,
[in, optional] PVOID CaptureCallbackContext
);
Parámetros
[in] SessionHandle
Valor de WINBIO_SESSION_HANDLE que identifica una sesión biométrica abierta.
[in] Purpose
Máscara de bits WINBIO_BIR_PURPOSE que especifica el uso previsto del ejemplo. 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
[in] Flags
Valor que especifica el tipo de procesamiento que se va a aplicar al ejemplo capturado. Puede ser un OR bit a bit de las siguientes marcas de nivel de seguridad y procesamiento:
- WINBIO_DATA_FLAG_PRIVACY
Cifre el ejemplo.
- WINBIO_DATA_FLAG_INTEGRITY
Firme el ejemplo o protéjalo mediante un código de autenticación de mensajes (MAC).
- WINBIO_DATA_FLAG_SIGNED
Si se establece esta marca y el WINBIO_DATA_FLAG_INTEGRITYflag, firme el ejemplo. Si no se establece esta marca, pero se establece la marca WINBIO_DATA_FLAG_INTEGRITY, calcule un MAC.
- WINBIO_DATA_FLAG_RAW
Devuelve la muestra exactamente como lo capturó el sensor.
- WINBIO_DATA_FLAG_INTERMEDIATE
Devuelve el ejemplo después de limpiarlo y filtrarlo.
- WINBIO_DATA_FLAG_PROCESSED
Devuelve el ejemplo después de que esté listo para usarse para el propósito especificado por el parámetro Purpose .
[in] CaptureCallback
Dirección de una función de devolución de llamada a la que llamará la función WinBioCaptureSampleWithCallback cuando la operación de captura se realice correctamente o se produzca un error. Debe crear la devolución de llamada.
[in, optional] CaptureCallbackContext
Dirección de una estructura de datos definida por la aplicación que se pasa a la función de devolución de llamada en su parámetro CaptureCallbackContext . Esta estructura puede contener los datos que la función de devolución de llamada personalizada está diseñada para controlar.
Valor devuelto
Si la función se ejecuta correctamente, devuelve S_OK. Si se produce un error en la función, devuelve un valor HRESULT que indica el error. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.
Código devuelto | Descripción |
---|---|
|
El autor de la llamada no tiene permiso para capturar muestras sin procesar o la sesión no se abrió mediante la marca WINBIO_FLAG_RAW . |
|
El identificador de sesión no es válido. |
|
La unidad biométrica no admite la operación solicitada. |
|
Los punteros UnitId, Sample, SampleSize y RejectDetail no pueden ser NULL. |
|
No se pudo completar la operación porque la unidad biométrica se está usando actualmente para una transacción de inscripción (solo para el grupo de sistemas). |
Comentarios
La función WinBioCaptureSampleWithCallback captura muestras de forma asincrónica. Para llamar correctamente a esta función, el identificador de sesión debe haberse abierto especificando WINBIO_FLAG_RAW. Solo los administradores y las cuentas del sistema local tienen los privilegios necesarios.
Las combinaciones válidas de los parámetrosPurpose y Flags dependen de las funcionalidades de la unidad biométrica que se usa. Consulte la documentación del sensor de proveedor para determinar qué combinaciones se admiten y cómo afectan a los datos capturados.
Los autores de llamadas son responsables de liberar la estructura de WINBIO_BIR devuelta por el parámetro Sample .
La rutina de devolución de llamada debe tener la siguiente firma:
VOID CALLBACK CaptureCallback(
__in_opt PVOID CaptureCallbackContext,
__in HRESULT OperationStatus,
__in WINBIO_UNIT_ID UnitId,
__in_bcount(SampleSize) PWINBIO_BIR Sample,
__in SIZE_T SampleSize,
__in WINBIO_REJECT_DETAIL RejectDetail
);
Ejemplos
En el ejemplo de código siguiente se captura un ejemplo de forma asincrónica llamando a WinBioCaptureSampleWithCallback y pasando un puntero a una función de devolución de llamada personalizada. También se muestra la función de devolución de llamada CaptureSampleCallback. Vincule a la biblioteca estática Winbio.lib e incluya los siguientes archivos de encabezado:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT CaptureSampleWithCallback(BOOL bCancel)
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Raw access
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 asynchronously.
wprintf_s(L"\n Calling WinBioCaptureSampleWithCallback ");
hr = WinBioCaptureSampleWithCallback(
sessionHandle, // Open session handle
WINBIO_NO_PURPOSE_AVAILABLE, // Intended use of the sample
WINBIO_DATA_FLAG_RAW, // Sample format
CaptureSampleCallback, // Callback function
NULL // Optional context
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L"hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Swipe the sensor ...\n");
// Cancel the capture process if the bCancel flag is set.
if (bCancel)
{
wprintf_s(L"\n Starting CANCEL timer...");
Sleep( 7000 );
wprintf_s(L"\n Calling WinBioCancel\n");
hr = WinBioCancel( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCancel failed. hr = 0x%x\n", hr);
goto e_Exit;
}
}
// Wait for the asynchronous capture process to complete
// or be canceled.
hr = WinBioWait( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioWait failed. hr = 0x%x\n", hr);
}
e_Exit:
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
//------------------------------------------------------------------------
// The following function is the callback for WinBioCaptureSampleWithCallback.
// The function filters the response from the biometric subsystem and
// writes a result to the console window.
//
VOID CALLBACK CaptureSampleCallback(
__in_opt PVOID CaptureCallbackContext,
__in HRESULT OperationStatus,
__in WINBIO_UNIT_ID UnitId,
__in_bcount(SampleSize) PWINBIO_BIR Sample,
__in SIZE_T SampleSize,
__in WINBIO_REJECT_DETAIL RejectDetail
)
{
UNREFERENCED_PARAMETER(CaptureCallbackContext);
wprintf_s(L"\n CaptureSampleCallback executing");
wprintf_s(L"\n Swipe processed - Unit ID: %d", UnitId);
if (FAILED(OperationStatus))
{
if (OperationStatus == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", RejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L" OperationStatus = 0x%x\n", OperationStatus);
}
goto e_Exit;
}
wprintf_s(L"\n Captured %d bytes.\n", SampleSize);
e_Exit:
if (Sample != NULL)
{
WinBioFree(Sample);
Sample = NULL;
}
}
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.h (incluya Winbio.h) |
Library | Winbio.lib |
Archivo DLL | Winbio.dll |