PIBIO_ENGINE_SET_HASH_ALGORITHM_FN回调函数 (winbio_adapter.h)

由 Windows 生物识别框架调用,以选择用于后续操作的哈希算法。

语法

PIBIO_ENGINE_SET_HASH_ALGORITHM_FN PibioEngineSetHashAlgorithmFn;

HRESULT PibioEngineSetHashAlgorithmFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [in]      SIZE_T AlgorithmBufferSize,
  [in]      PUCHAR AlgorithmBuffer
)
{...}

参数

[in, out] Pipeline

指向与执行操作的生物识别单元关联的 WINBIO_PIPELINE 结构的指针。

[in] AlgorithmBufferSize

AlgorithmBuffer 参数指定的缓冲区的大小(以字节为单位)。

[in] AlgorithmBuffer

指向以 NULL 结尾的 ANSI 字符串的指针,该字符串包含要选择的哈希算法的对象标识符。 调用 EngineAdapterQueryHashAlgorithms 函数以检索受支持算法对象标识符的数组 (OID) 。

返回值

如果函数成功,则返回S_OK。 如果函数失败,它必须返回以下 HRESULT 值之一来指示错误。

返回代码 说明
E_POINTER
强制指针参数为 NULL
E_NOTIMPL
引擎适配器不支持模板哈希。
E_INVALIDARG
引擎适配器不支持 AlgorithmBuffer 参数指定的哈希算法。

注解

Windows 生物识别框架调用此函数,以在每次将单元添加到传感器池时配置生物识别单元。

由于哈希算法是按管道选择的,因此引擎适配器必须将所选算法存储在专用管道上下文中。

引擎适配器必须跟踪所选的最新算法,并在处理对以下函数的调用时使用此算法:

此函数选择的算法必须保持选中状态,直到下次调用 EngineAdapterSetHashAlgorithm ,或直到调用 EngineAdapterDetach 方法。 具体而言,对 EngineAdapterClearContext 函数的调用不应影响所选算法。

Windows 生物识别框架仅使用 SHA1 哈希算法。 此算法的 OID 字符串值为“1.3.14.3.2.26”。 有关详细信息,请参阅 EngineAdapterQueryHashAlgorithms

示例

以下伪代码演示了此函数的一种可能实现。 该示例不编译。 必须根据自己的目的调整它。

//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterSetHashAlgorithm
//
// Purpose:
//      Selects a hash algorithm for use in subsequent operations.
//
// Parameters:
//      Pipeline            - Pointer to a WINBIO_PIPELINE structure associated 
//                            with the biometric unit performing the operation.   
//      AlgorithmBufferSize - Size, in bytes, of the buffer specified by the 
//                            AlgorithmBuffer parameter.
//      AlgorithmBuffer     - Pointer to a NULL-terminated ANSI string that 
//                            contains the object identifier of the hash algorithm
//                            to select.
//
static HRESULT
WINAPI
EngineAdapterSetHashAlgorithm(
    __inout PWINBIO_PIPELINE Pipeline,
    __in SIZE_T AlgorithmBufferSize,
    __in PUCHAR AlgorithmBuffer
    )
{
    ////////////////////////////////////////////////////////////////////////////
    // Return E_NOTIMPL here if your adapter does not support template hashing.
    ////////////////////////////////////////////////////////////////////////////

    HRESULT hr = S_OK;
    SIZE_T algorithmSize = (strlen(szOID_OIWSEC_sha1) + 1) * sizeof(CHAR);

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(AlgorithmBuffer))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Only the SHA1 hashing algorithm is supported.
    // Therefore, make certain that SHA1 is included in the algorithm
    // table.
    // The SHA1 object identifier, szOID_OIWSEC_sha1, is contained in the
    // Wincrypt.h header file.
    if (AlgorithmBufferSize != algorithmSize ||
        memcmp(AlgorithmBuffer, szOID_OIWSEC_sha1, algorithmSize) != 0)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // Make any necessary changes to the adapter state to specify that
    // SHA1 hashing is enabled. If your adapter does not support template
    // hashing, return E_NOTIMPL.

cleanup:
    
    return hr;
}

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 winbio_adapter.h (包括 Winbio_adapter.h)

另请参阅

EngineAdapterQueryHashAlgorithms

插件函数