PIBIO_STORAGE_ATTACH_FN回调函数 (winbio_adapter.h)
在将存储适配器添加到生物识别单元的处理管道时由 Windows 生物识别框架调用。 此函数的目的是执行后续生物识别操作所需的任何初始化。
语法
PIBIO_STORAGE_ATTACH_FN PibioStorageAttachFn;
HRESULT PibioStorageAttachFn(
[in, out] PWINBIO_PIPELINE Pipeline
)
{...}
参数
[in, out] Pipeline
指向与执行操作的生物识别单元关联的 WINBIO_PIPELINE 结构的指针。
返回值
如果函数成功,则返回S_OK。 如果函数失败,它必须返回以下 HRESULT 值之一来指示错误。
返回代码 | 说明 |
---|---|
|
Pipeline 参数不能为 NULL。 |
|
由于内存不足,操作无法完成。 |
|
Pipeline 参数指向的 WINBIO_PIPELINE 结构的 StorageContext 成员不是 NULL,或者 StorageHandle 成员未设置为 INVALID_HANDLE_VALUE。 |
注解
实现此函数时,必须分配和管理适配器所需的任何资源,并将其附加到生物识别单元管道。 为此,请在堆上分配专用 WINIBIO_STORAGE_CONTEXT 结构,对其进行初始化,并在管道对象的 StorageContext 成员中设置其地址。
如果调用此函数时 StorageContext 字段不为 NULL ,则以前调用 StorageAdapterDetach 时未正确重置管道,必须返回 WINBIO_E_INVALID_DEVICE_STATE 以通知 Windows 生物识别框架出现问题。
同样,如果在调用此函数时 StorageHandle 字段不包含 INVALID_HANDLE_VALUE ,则必须返回 WINBIO_E_INVALID_DEVICE_STATE。
如果在创建和初始化此函数使用的存储适配器资源期间出错,则必须在返回之前执行任何必需的清理。
示例
以下伪代码演示了此函数的一种可能实现。 该示例不编译。 必须根据自己的目的调整它。
/////////////////////////////////////////////////////////////////////////////////////////
//
// StorageAdapterAttach
//
// Purpose:
// Performs any initialization required for later biometric operations.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated with
// the biometric unit performing the operation.
//
static HRESULT
WINAPI
StorageAdapterAttach(
__inout PWINBIO_PIPELINE Pipeline
)
{
HRESULT hr = S_OK;
PWINBIO_STORAGE_CONTEXT newContext = NULL;
// Verify that the Pipeline parameter is not NULL.
if (!ARGUMENT_PRESENT(Pipeline))
{
hr = E_POINTER;
goto cleanup;
}
if (Pipeline->StorageContext != NULL ||
Pipeline->StorageHandle != INVALID_HANDLE_VALUE)
{
// The pipeline state is not valid. This function should never
// be called if the pipeline already contains a storage context
// or a valid storage handle.
hr = WINBIO_E_INVALID_DEVICE_STATE;
goto cleanup;
}
// Call a custom function (_AdapterAlloc) to allocate memory to hold the
// sensor adapter context.
newContext = (PWINBIO_STORAGE_CONTEXT)_AdapterAlloc(sizeof(WINBIO_STORAGE_CONTEXT));
if (newContext == NULL)
{
hr = E_OUTOFMEMORY;
goto cleanup;
}
// Call a custom function to initialize the result set to be used by the next
// query operation. Initialization typically requires that you clear the result set
// of any previous query, mark the set as empty, and place the result set cursor
// in a known state.
// The result set is attached to the storage context so that it can persist from
// one storage adapter call to the next.
hr = _ResultSetInitialize(&newContext->ResultSet);
if (FAILED(hr))
{
goto cleanup;
}
// TODO: Initialize any other required context fields (not shown).
// If initialization completes successfully, attach the context to the
// processing pipeline of the biometric unit.
Pipeline->StorageContext = newContext;
newContext = NULL;
cleanup:
if (FAILED(hr) && newContext != NULL)
{
_ResultSetCleanup(&newContext->ResultSet);
_AdapterRelease( newContext );
newContext = NULL;
}
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbio_adapter.h (包括 Winbio_adapter.h) |