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
데이터베이스에 저장할 템플릿의 GUID 또는 SID를 포함하는 WINBIO_IDENTITY 구조체에 대한 포인터입니다.
[in] SubFactor
데이터베이스에 저장할 템플릿과 연결된 하위 요소를 지정하는 WINBIO_BIOMETRIC_SUBTYPE 값입니다.
[in, optional] PayloadBlob
Windows 생체 인식 프레임워크에서 생성된 확인 서명을 포함하는 바이트 배열에 대한 선택적 포인터입니다.
[in] PayloadBlobSize
PayloadBlob 매개 변수가 가리키는 문자 배열의 크기(바이트)입니다. PayloadBlob 매개 변수가 NULL인 경우 이 값은 0이어야 합니다.
반환 값
함수가 성공하면 S_OK를 반환합니다. 함수가 실패하면 다음 HRESULT 값 중 하나 또는 스토리지 어댑터에서 반환된 모든 값을 반환해야 합니다.
반환 코드 | 설명 |
---|---|
|
필수 포인터 인수는 NULL입니다. |
|
Identity 매개 변수 또는 SubFactor 매개 변수로 지정된 값이 잘못되었습니다. |
|
Identity 및 SubFactor 매개 변수로 지정된 템플릿이 데이터베이스에 이미 저장되어 있습니다. |
|
파이프라인에 연결된 템플릿이 없습니다. |
설명
이 함수가 성공하면 파이프라인에서 등록 템플릿을 플러시해야 합니다. 이 작업의 결과는 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 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbio_adapter.h(Winbio_adapter.h 포함) |