CryptGetDefaultProviderA 函数 (wincrypt.h)
语法
BOOL CryptGetDefaultProviderA(
[in] DWORD dwProvType,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] LPSTR pszProvName,
[in, out] DWORD *pcbProvName
);
参数
[in] dwProvType
要为其找到默认 CSP 名称的提供程序类型。
定义的提供程序类型如下所示:
- PROV_RSA_FULL
- PROV_RSA_SIG
- PROV_DSS
- PROV_DSS_DH
- PROV_DH_SCHANNEL
- PROV_FORTEZZA
- PROV_MS_EXCHANGE
- PROV_RSA_SCHANNEL
- PROV_SSL
[in] pdwReserved
此参数保留以供将来使用,并且必须 NULL。
[in] dwFlags
定义了以下标志值。
价值 | 意义 |
---|---|
|
返回指定类型的用户上下文默认 CSP。 |
|
返回指定类型的计算机默认 CSP。 |
[out] pszProvName
指向以 null 结尾的字符串缓冲区的指针,用于接收默认 CSP 的名称。
若要查找用于内存分配的缓冲区大小,可以将此参数 NULL。 有关详细信息,请参阅 检索未知长度的数据。
[in, out] pcbProvName
指向 DWORD 值的指针,该值指定由 pszProvName 参数指向的缓冲区的大小(以字节为单位)。 函数返回时,DWORD 值包含存储或存储在缓冲区中的字节数。
返回值
如果函数成功,则返回值为非零(TRUE)。
如果函数失败,则返回值为零(FALSE)。 有关扩展错误信息,请调用 GetLastError。
NTE 前面带的错误代码由正在使用的特定 CSP 生成。 可能的错误代码包括以下内容。
返回代码 | 描述 |
---|---|
|
其中一个参数包含无效的值。 这通常是无效的指针。 |
|
名称的缓冲区不够大。 |
|
操作系统内存不足。 |
|
dwFlags 参数具有无法识别的值。 |
言论
此函数确定当前将哪个已安装的 CSP 设置为本地计算机或当前用户的默认值。 此信息通常向用户显示。
例子
以下示例检索PROV_RSA_FULL提供程序类型的默认 CSP 的名称。 有关使用此函数的另一个示例,请参阅 示例 C 程序:枚举 CSP 提供程序和提供程序类型。
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")
void main()
{
DWORD cbProvName=0;
LPTSTR pbProvName=NULL;
// Copyright (C) Microsoft. All rights reserved.
// Get the length of the RSA_FULL default provider name.
if (!(CryptGetDefaultProvider(
PROV_RSA_FULL,
NULL,
CRYPT_MACHINE_DEFAULT,
NULL,
&cbProvName)))
{
printf("Error getting the length of the default "
"provider name.\n");
exit(1);
}
// Allocate local memory for the name of the default provider.
if (!(pbProvName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT,
cbProvName)))
{
printf("Error during memory allocation for "
"provider name.\n");
exit(1);
}
// Get the default provider name.
if (CryptGetDefaultProvider(
PROV_RSA_FULL,
NULL,
CRYPT_MACHINE_DEFAULT,
pbProvName,
&cbProvName))
{
printf("The default provider name is %s\n",pbProvName);
}
else
{
printf("Getting the name of the provider failed.\n");
exit(1);
}
// Free resources when done.
LocalFree(pbProvName);
}
注意
wincrypt.h 标头将 CryptGetDefaultProvider 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | wincrypt.h |
库 | Advapi32.lib |
DLL | Advapi32.dll |