PIBIO_ENGINE_GET_ENROLLMENT_HASH_FN回调函数 (winbio_adapter.h)
由 Windows 生物识别框架调用,以检索管道中已完成注册模板的哈希。
语法
PIBIO_ENGINE_GET_ENROLLMENT_HASH_FN PibioEngineGetEnrollmentHashFn;
HRESULT PibioEngineGetEnrollmentHashFn(
[in, out] PWINBIO_PIPELINE Pipeline,
[out] PUCHAR *HashValue,
[out] PSIZE_T HashSize
)
{...}
参数
[in, out] Pipeline
指向与执行操作的生物识别单元关联的 WINBIO_PIPELINE 结构的指针。
[out] HashValue
变量的地址,该变量接收指向包含模板哈希的字节数组的指针。
[out] HashSize
指向变量的指针,该变量接收 HashValue 参数指向的哈希的大小(以字节为单位)。
返回值
如果函数成功,则返回S_OK。 如果函数失败,则必须返回以下 HRESULT 值之一来指示错误。
返回代码 | 说明 |
---|---|
|
强制指针参数为 NULL。 |
|
引擎适配器不支持模板哈希生成。 |
|
管道不包含已完成的注册模板。 |
注解
此函数哈希的模板必须是调用 EngineAdapterCommitEnrollment 时将存储在数据库中的已完成注册模板。 不得对其中一个中间捕获的样本进行哈希处理。
用于生成模板哈希的算法是最近在此管道上对 EngineAdapterSetHashAlgorithm 的调用选择的算法。
EngineAdapterGetEnrollmentHash 函数成功返回后,包含哈希的内存由引擎适配器拥有和管理。 在框架调用以下任何函数之前,引擎适配器必须保持缓冲区地址有效:
引擎适配器还必须为每个管道维护单独的哈希缓冲区。示例
以下伪代码显示了此函数的一种可能实现。 该示例不编译。 必须根据自己的目的调整它。
//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterGetEnrollmentHash
//
// Purpose:
// Retrieves the hash of the completed enrollment template in the pipeline.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated
// with the biometric unit performing the operation
// HashValue - Contains the hash of the template
// HashSize - Size, in bytes, of the hash pointed to by the
// HashValue parameter
//
static HRESULT
WINAPI
EngineAdapterGetEnrollmentHash(
__inout PWINBIO_PIPELINE Pipeline,
__out PUCHAR *HashValue,
__out PSIZE_T HashSize
)
{
////////////////////////////////////////////////////////////////////////////
// Return E_NOTIMPL here if your adapter does not support template hashing.
////////////////////////////////////////////////////////////////////////////
HRESULT hr = S_OK;
// Verify that pointer arguments are not NULL.
if (!ARGUMENT_PRESENT(Pipeline) ||
!ARGUMENT_PRESENT(HashValue) ||
!ARGUMENT_PRESENT(HashSize))
{
hr = E_POINTER;
goto cleanup;
}
// Retrieve the context from the pipeline.
PWINBIO_ENGINE_CONTEXT context =
(PWINBIO_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;
}
// Initialize the hash.
*HashValue = NULL;
*HashSize = 0;
// If your engine adapter supports template hashing, call a custom function
// (_AdapterGenerateHashForTemplate) to calculate the hash of the new
// enrollment template. The hash value should be saved in the adapter
// context.
hr = _AdapterGenerateHashForTemplate(
context,
context->Enrollment.Template,
context->Enrollment.TemplateSize,
context->HashBuffer,
&context->HashSize
);
if (FAILED(hr))
{
goto cleanup;
}
// Return the hash to the caller.
*HashValue = context->HashBuffer;
*HashSize = context->HashSize;
cleanup:
return hr;
}
要求
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbio_adapter.h (包括 Winbio_adapter.h) |