CryptEnumProviderTypesA 函数 (wincrypt.h)
提供程序类型包括PROV_RSA_FULL、PROV_RSA_SCHANNEL和PROV_DSS。
语法
BOOL CryptEnumProviderTypesA(
[in] DWORD dwIndex,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] DWORD *pdwProvType,
[out] LPSTR szTypeName,
[in, out] DWORD *pcbTypeName
);
参数
[in] dwIndex
要枚举的下一个提供程序类型的索引。
[in] pdwReserved
保留以供将来使用,必须为 NULL。
[in] dwFlags
保留以供将来使用,必须为零。
[out] pdwProvType
指定枚举提供程序类型的 DWORD 值的地址。
[out] szTypeName
指向从枚举提供程序类型接收数据的缓冲区的指针。 这是一个包含终止 NULL 字符的字符串。 某些提供程序类型没有显示名称,在本例中不返回名称, 且返回的由typeName 指向的值为零。
此参数可以为 NULL ,以获取名称的大小,以便进行内存分配。 有关详细信息,请参阅 检索未知长度的数据。
[in, out] pcbTypeName
指向 DWORD 值的指针,该值指定 pszTypeName 参数指向的缓冲区的大小(以字节为单位)。 当函数返回时, DWORD 值包含缓冲区中存储或要存储的字节数。 某些提供程序类型没有显示名称,在本例中不返回名称, 且返回的由typeName 指向的值为零。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零 (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
NTE 开头的错误代码由使用的特定 CSP 生成。 下面是一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
没有更多项要枚举。 |
|
操作系统内存不足。 |
|
dwFlags 参数具有无法识别的值。 |
|
类型注册出现问题。 |
注解
此函数枚举计算机上可用的提供程序类型。 可以使用 CryptEnumProviders 枚举任何特定提供程序类型的提供程序。
示例
以下示例演示一个循环,其中列出了所有可用的加密服务提供程序类型。
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "advapi32.lib")
void main()
{
// Copyright (C) Microsoft. All rights reserved.
// Declare and initialize variables.
DWORD dwIndex;
DWORD dwType;
DWORD cbName;
LPTSTR pszName;
//--------------------------------------------------------------
// Print header lines for provider types.
printf("Listing Available Provider Types:\n");
printf("Provider type\tProvider Type Name\n");
printf("_____________\t_____________________________________\n");
// Loop through enumerating provider types.
dwIndex = 0;
while(CryptEnumProviderTypes(
dwIndex,
NULL,
0,
&dwType,
NULL,
&cbName
))
{
//-----------------------------------------------------------
// cbName returns the length of the name of the next
// provider type. Allocate memory in a buffer to retrieve
// that name.
if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
{
printf("ERROR - LocalAlloc failed.\n");
exit(1);
}
//-----------------------------------------------------------
// Get the provider type name.
if (CryptEnumProviderTypes(
dwIndex++,
NULL,
NULL,
&dwType,
pszName,
&cbName))
{
printf (" %4.0d\t%s\n",dwType, pszName);
}
else
{
printf("ERROR - CryptEnumProviderTypes\n");
exit(1);
}
LocalFree(pszName);
} // End of while loop.
}
有关使用 CryptEnumProviderTypes 函数的另一个示例,请参阅 示例 C 程序:枚举 CSP 提供程序和提供程序类型。
注意
wincrypt.h 标头将 CryptEnumProviderTypes 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Advapi32.lib |
DLL | Advapi32.dll |