функция обратного вызова PIBIO_ENGINE_COMMIT_ENROLLMENT_FN (winbio_adapter.h)

Вызывается Windows Биометрические платформы для завершения объекта регистрации, преобразования его в шаблон и сохранения шаблона в базе данных.

Синтаксис

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
)
{...}

Параметры

[in, out] Pipeline

Указатель на структуру WINBIO_PIPELINE , связанную с биометрическим блоком, выполняющим операцию.

[in] Identity

Указатель на структуру WINBIO_IDENTITY , содержащую ИДЕНТИФИКАТОР GUID или ИДЕНТИФИКАТОР шаблона, который будет храниться в базе данных.

[in] SubFactor

Значение WINBIO_BIOMETRIC_SUBTYPE, указывающее подфактор, связанный с шаблоном, который будет храниться в базе данных.

[in, optional] PayloadBlob

Необязательный указатель на массив байтов, содержащий сигнатуру проверки, созданную Windows Биометрических данных.

[in] PayloadBlobSize

Размер в байтах массива символов, на который указывает параметр PayloadBlob . Это значение должно быть равно нулю, если параметр PayloadBlob имеет значение NULL.

Возвращаемое значение

Если функция выполнена успешно, она возвращает S_OK. Если функция завершается ошибкой, она должна вернуть одно из следующих значений HRESULT или любое значение, возвращаемое адаптером хранилища.

Код возврата Description
E_POINTER
Обязательный аргумент указателя — NULL.
E_INVALIDARG
Значение, указанное параметром Identity или параметром SubFactor , недопустимо.
WINBIO_E_DUPLICATE_ENROLLMENT
Шаблон, указанный параметрами Identity и SubFactor , уже сохраняется в базе данных.
WINBIO_E_INVALID_DEVICE_STATE
Шаблон не подключен к конвейеру.

Замечания

Если эта функция выполнена успешно, он должен очистить шаблон регистрации из конвейера. Результат этого действия должен быть эквивалентен вызову EngineAdapterClearContext.

Если эта функция завершается ошибкой, она не должна изменять состояние контекста обработчика. В частности, если к конвейеру подключен готовый шаблон, можно снова вызвать эту функцию (после того, как были устранены причины сбоя), чтобы зафиксировать шаблон в базе данных.

Адаптеры подсистемы, поддерживающие проверку подлинности перед загрузкой, должны зафиксировать регистрацию не только адаптеру хранилища, подключенному к конвейеру, но и в области хранения перед загрузкой. Сведения о том, как это необходимо сделать, остаются у поставщика.

Важно!  

Не пытайтесь проверить значение, предоставленное для параметра SubFactor . Служба биометрических данных Windows проверяет предоставленное значение перед передачей в реализацию. Если значение WINBIO_SUBTYPE_NO_INFORMATION или WINBIO_SUBTYPE_ANY, проверьте, где это необходимо.

 

Примеры

В следующем псевдокоде показана одна из возможных реализаций этой функции. Пример не компилируется. Вы должны адаптировать его в соответствии с вашей целью.

//////////////////////////////////////////////////////////////////////////////////////////
//
// 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;
}

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 7 [только настольные приложения]
минимальный поддерживаемый сервер Windows Server 2008 R2 [только классические приложения]
целевая платформа Виндоус
Header winbio_adapter.h (include Winbio_adapter.h)

См. также

EngineAdapterClearContext

Функции подключаемого модуля