BCryptOpenAlgorithmProvider 函数 (bcrypt.h)
BCryptOpenAlgorithmProvider 函数加载并初始化 CNG 提供程序。
语法
NTSTATUS BCryptOpenAlgorithmProvider(
[out] BCRYPT_ALG_HANDLE *phAlgorithm,
[in] LPCWSTR pszAlgId,
[in] LPCWSTR pszImplementation,
[in] ULONG dwFlags
);
参数
[out] phAlgorithm
指向接收 CNG 提供程序句柄的 BCRYPT_ALG_HANDLE 变量的指针。 使用此句柄后,请将其传递给 BCryptCloseAlgorithmProvider 函数来释放它。
[in] pszAlgId
指向标识所请求加密算法的以 null 结尾的 Unicode 字符串的指针。 这可以是 的标准
[in] pszImplementation
指向标识要加载的特定提供程序的以 null 结尾的 Unicode 字符串的指针。 这是加密基元提供程序的已注册别名。 此参数是可选的,如果需要,则可以 NULL。 如果此参数 NULL,则将加载指定算法的默认提供程序。
下面是预定义的提供程序名称。
价值 | 意义 |
---|---|
|
标识 CNG 提供程序的基本Microsoft。 |
|
标识由Microsoft提供的 TPM 密钥存储提供程序。 |
[in] dwFlags
修改函数行为的标志。 这可以是零,也可以是以下一个或多个值的组合。
价值 | 意义 |
---|---|
|
提供程序将使用指定的哈希算法执行 Hash-Based 消息身份验证代码 (HMAC) 算法。 此标志仅由哈希算法提供程序使用。 |
|
将提供程序加载到非分页内存池中。 如果此标志不存在,则提供程序将加载到分页内存池中。 指定此标志后,在释放所有依赖对象之前,不得关闭返回的句柄。
注意 此标志仅在内核模式下受支持,并允许在 Dispatch 级别处理提供程序上的后续操作。 如果提供程序不支持在调度级别调用,则在使用此标志打开时,它将返回错误。
|
|
创建可重用的哈希对象。 在调用 BCryptFinishHash后,该对象可以立即用于新的哈希操作。 有关详细信息,请参阅 使用 CNG创建哈希。
Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista:不支持 此标志。 |
返回值
返回一个状态代码,指示函数的成功或失败。
可能的返回代码包括但不限于以下代码。
返回代码 | 描述 |
---|---|
|
函数成功。 |
|
找不到指定算法 ID 的提供程序。 |
|
一个或多个参数无效。 |
|
发生内存分配失败。 |
言论
由于查找、加载和初始化算法提供程序所需的操作的数量和类型,BCryptOpenAlgorithmProvider 函数是一个相对耗时的函数。 因此,我们建议缓存将多次使用的任何算法提供程序句柄,而不是打开和关闭算法提供程序。
BCryptOpenAlgorithmProvider 可以从用户模式或内核模式调用。 内核模式调用方必须在 IRQL
若要在内核模式下调用此函数,请使用 Cng.lib,这是驱动程序开发工具包(DDK)的一部分。 Windows Server 2008 和 Windows Vista:若要在内核模式下调用此函数,请使用 Ksecdd.lib。
从 Windows 10 开始,CNG 不再遵循加密配置的每个更新。 某些更改(例如添加新的默认提供程序或更改算法提供程序的首选项顺序)可能需要重新启动。 因此,应先重新启动,然后再调用 BCryptOpenAlgorithmProvider 任何新配置的提供程序。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2008 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | bcrypt.h |
库 | Bcrypt.lib |
DLL | Bcrypt.dll |