PIBIO_ENGINE_DETACH_FN回调函数 (winbio_adapter.h)
在从生物识别单元的处理管道中删除引擎适配器之前,由 Windows 生物识别框架调用。 此函数的目的是释放附加到管道的适配器特定资源。
语法
PIBIO_ENGINE_DETACH_FN PibioEngineDetachFn;
HRESULT PibioEngineDetachFn(
[in, out] PWINBIO_PIPELINE Pipeline
)
{...}
参数
[in, out] Pipeline
指向与执行操作的生物识别单元关联的 WINBIO_PIPELINE 结构的指针。
返回值
如果函数成功,则返回S_OK。 如果函数失败,则必须返回以下 HRESULT 值之一来指示错误。
返回代码 | 说明 |
---|---|
|
Pipeline 参数不能为 NULL。 |
|
WINBIO_PIPELINE结构的 EngineContext 字段不能为 NULL。 |
注解
若要防止内存泄漏,EngineAdapterDetach 函数的实现必须释放管道的 EngineContext 成员指向的专用WINBIO_ENGINE_CONTEXT结构,以及附加到引擎上下文的任何其他资源。
如果调用此函数时管道对象中的 EngineContext 字段为 NULL ,则表示管道未正确初始化,必须返回 WINBIO_E_INVALID_DEVICE_STATE 以通知 Windows 生物识别框架该问题。
在返回S_OK之前,EngineAdapterDetach 函数必须将WINBIO_PIPELINE结构的 EngineContext 字段设置为 NULL,并将 EngineHandle 字段设置为INVALID_HANDLE_VALUE。
从管道中删除存储适配器后,将调用此函数。 因此,此函数不得调用管道对象的 StorageInterface 成员所指向WINBIO_STORAGE_INTERFACE结构所引用的任何函数。
示例
以下伪代码显示了此函数的一种可能实现。 该示例不编译。 必须根据自己的目的调整它。
//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterDetach
//
// Purpose:
// Releases adapter specific resources attached to the pipeline.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated with
// the biometric unit.
//
static HRESULT
WINAPI
EngineAdapterDetach(
__inout PWINBIO_PIPELINE Pipeline
)
{
PWINBIO_ENGINE_CONTEXT context = NULL;
// Verify that the Pipeline parameter is not NULL.
if (!ARGUMENT_PRESENT(Pipeline))
{
hr = E_POINTER;
goto cleanup;
}
// Retrieve the context from the pipeline and assign it to a local
// variable.
context = (PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;
if (context == NULL)
{
goto cleanup;
}
// Set the context on the pipeline to NULL.
Pipeline->EngineContext = NULL;
// If your adapter supports software-based template hashing and you
// opened a Cryptography Next Generation (CNG) hash object handle
// during initialization, implement the following custom function to
// release the CNG resources.
_AdapterCleanupCrypto(context);
// Implement one or more custom routines to release any structures
// that remain attached to the context block. These structures can
// include the most recent feature set, the current enrollment template,
// and other custom defined objects.
if (context->FeatureSet != NULL)
{
_AdapterRelease(context->FeatureSet);
context->FeatureSet = NULL;
context->FeatureSetSize = 0;
}
if (context->Enrollment.Template != NULL)
{
_AdapterRelease(context->Enrollment.Template);
context->Enrollment.Template = NULL;
context->Enrollment.TemplateSize = 0;
context->Enrollment.SampleCount = 0;
}
if (context->SomePointerField != NULL)
{
_AdapterRelease(context->SomePointerField);
context->SomePointerField = NULL;
}
// Release the context block.
_AdapterRelease(context);
cleanup:
return S_OK;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbio_adapter.h (包括 Winbio_adapter.h) |