PIBIO_ENGINE_COMMIT_ENROLLMENT_FN función de devolución de llamada (winbio_adapter.h)
Lo llama Windows Biometric Framework para finalizar el objeto de inscripción, convertirlo en una plantilla y guardar la plantilla en la base de datos.
Sintaxis
PIBIO_ENGINE_COMMIT_ENROLLMENT_FN PibioEngineCommitEnrollmentFn;
HRESULT PibioEngineCommitEnrollmentFn(
[in, out] PWINBIO_PIPELINE Pipeline,
[in] PWINBIO_IDENTITY Identity,
[in] WINBIO_BIOMETRIC_SUBTYPE SubFactor,
[in, optional] PUCHAR PayloadBlob,
[in] SIZE_T PayloadBlobSize
)
{...}
Parámetros
[in, out] Pipeline
Puntero a una estructura de WINBIO_PIPELINE asociada a la unidad biométrica que realiza la operación.
[in] Identity
Puntero a una estructura de WINBIO_IDENTITY que contiene el GUID o el SID de la plantilla que se va a almacenar en la base de datos.
[in] SubFactor
Valor de WINBIO_BIOMETRIC_SUBTYPE que especifica el subfactor asociado a la plantilla que se va a almacenar en la base de datos.
[in, optional] PayloadBlob
Puntero opcional a una matriz de bytes que contienen una firma de verificación generada por Windows Biometric Framework.
[in] PayloadBlobSize
Tamaño, en bytes, de la matriz de caracteres a la que apunta el parámetro PayloadBlob . Este valor debe ser cero si el parámetro PayloadBlob es NULL.
Valor devuelto
Si la función se realiza correctamente, devuelve S_OK. Si se produce un error en la función, debe devolver uno de los siguientes valores HRESULT o cualquier valor devuelto por el adaptador de almacenamiento.
Código devuelto | Descripción |
---|---|
|
Un argumento de puntero obligatorio es NULL. |
|
El valor especificado por el parámetro Identity o el parámetro SubFactor no es válido. |
|
La plantilla especificada por los parámetros Identity y SubFactor ya está guardada en la base de datos. |
|
No hay ninguna plantilla asociada a la canalización. |
Comentarios
Si esta función se realiza correctamente, debe vaciar la plantilla de inscripción de la canalización. El resultado de esta acción debe ser equivalente a llamar a EngineAdapterClearContext.
Si se produce un error en esta función, no debe cambiar el estado del contexto del motor. En concreto, si hay una plantilla completada adjunta a la canalización, debe ser posible llamar a esta función de nuevo (después de que se hayan solucionado los motivos de cualquier error) para confirmar la plantilla en la base de datos.
Los adaptadores de motor que admiten la autenticación previa al arranque deben confirmar la inscripción no solo en el adaptador de almacenamiento conectado a la canalización, sino también en el área de almacenamiento previo al arranque. Los detalles de cómo se va a realizar esto se dejan al proveedor.
No intente validar el valor proporcionado para el parámetro SubFactor . El servicio biométrico de Windows validará el valor proporcionado antes de pasarlo a la implementación. Si el valor es WINBIO_SUBTYPE_NO_INFORMATION o WINBIO_SUBTYPE_ANY, valide cuando corresponda.
Ejemplos
El pseudocódigo siguiente muestra una posible implementación de esta función. El ejemplo no se compila. Debes adaptarlo para adaptarlo a tu propósito.
//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterCommitEnrollment
//
// Purpose:
// Finalizes the enrollment object, converts it to a template, and saves
// the template in the database.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated
// with the biometric unit performing the operation
// Identity - GUID or SID of the template to be stored in the
// database
// SubFactor - Sub-factor associated with the template to be stored
// in the database
// PayloadBlob - Optional pointer to an array of bytes that contain a
// verification signature generated by the Windows Biometric
// Framework
// PayloadBlobSize - Size, in bytes, of the character array pointed to by
// the PayloadBlob parameter
//
static HRESULT
WINAPI
EngineAdapterCommitEnrollment(
__inout PWINBIO_PIPELINE Pipeline,
__in PWINBIO_IDENTITY Identity,
__in WINBIO_BIOMETRIC_SUBTYPE SubFactor,
__in PUCHAR PayloadBlob,
__in SIZE_T PayloadBlobSize
)
{
HRESULT hr = S_OK;
DWORD indexVector[NUMBER_OF_TEMPLATE_BINS] = {0};
WINBIO_REJECT_DETAIL rejectDetail = 0;
WINBIO_STORAGE_RECORD newTemplate = {0};
// Verify that pointer arguments are not NULL.
if (!ARGUMENT_PRESENT(Pipeline) ||
!ARGUMENT_PRESENT(Identity))
{
hr = E_POINTER;
goto cleanup;
}
if (ARGUMENT_PRESENT(PayloadBlob) && PayloadBlobSize == 0)
{
hr = E_INVALIDARG;
goto cleanup;
}
if (!ARGUMENT_PRESENT(PayloadBlob) && PayloadBlobSize > 0)
{
hr = E_INVALIDARG;
goto cleanup;
}
// TODO: Verify that the SubFactor and Identity arguments are valid.
// Retrieve the context from the pipeline.
PWINIBIO_ENGINE_CONTEXT context =
(PWINIBIO_ENGINE_CONTEXT)Pipeline->EngineContext;
// Return if an enrollment is not in progress. This example assumes that
// an enrollment object is part of your engine context structure.
if (context->Enrollment.InProgress != TRUE)
{
hr = WINBIO_E_INVALID_DEVICE_STATE;
goto cleanup;
}
// If your adapter supports index vectors to place templates into buckets,
// call a custom function (_AdapterCreateIndexVector) to create an index
// vector from the template data in the enrollment object.
hr = _AdapterCreateIndexVector(
context,
context->Enrollment.Template,
context->Enrollment.TemplateSize,
indexVector,
NUMBER_OF_TEMPLATE_BINS,
&rejectDetail
);
if (FAILED(hr))
{
goto cleanup;
}
newTemplate.Identity = Identity;
newTemplate.SubFactor = SubFactor;
newTemplate.IndexVector = indexVector;
newTemplate.IndexElementCount = NUMBER_OF_TEMPLATE_BINS;
newTemplate.TemplateBlob = context->Enrollment.Template;
newTemplate.TemplateBlobSize = context->Enrollment.TemplateSize;
newTemplate.PayloadBlob = PayloadBlob;
newTemplate.PayloadBlobSize = PayloadBlobSize;
hr = WbioStorageAddRecord(
Pipeline,
&newTemplate
);
if (FAILED(hr))
{
goto cleanup;
}
// Call a custom function (_AdapterDestroyEnrollmentTemplate) to release
// any resources held by the enrollment object.
_AdapterDestroyEnrollmentTemplate(
context,
&context->Enrollment
);
// Specify that the enrollment process has been completed.
context->Enrollment.InProgress = FALSE;
cleanup:
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) |