CertGetStoreProperty 函数 (wincrypt.h)
CertGetStoreProperty 函数检索存储属性。
语法
BOOL CertGetStoreProperty(
[in] HCERTSTORE hCertStore,
[in] DWORD dwPropId,
[out] void *pvData,
[in, out] DWORD *pcbData
);
参数
[in] hCertStore
打开的 证书存储的句柄。
[in] dwPropId
指示一系列存储属性之一。 有一个预定义的存储属性,CERT_STORE_LOCALIZED_NAME_PROP_ID存储的本地化名称。
用户定义的属性必须超出预定义上下文属性的当前值范围。 目前,用户定义的 dwPropId 值从 4,096 开始。
[out] pvData
指向缓冲区的指针,该缓冲区接收由 dwPropId 确定的数据。 对于CERT_STORE_LOCALIZED_NAME_PROP_ID,这是存储的本地化名称, pvData 指向以 null 结尾的 Unicode 宽字符字符串。 对于其他 dwPropId,pvData指向字节数组。
此参数可以为 NULL ,用于设置此信息的大小,以便进行内存分配。 有关详细信息,请参阅 检索长度未知的数据。
[in, out] pcbData
指向 DWORD 值的指针,该值指定 pvData 缓冲区的大小(以字节为单位)。 函数返回时, DWORD 值包含缓冲区中存储的字节数。
返回值
如果函数成功,该函数将返回非零值。
如果函数失败,则返回零。
如果找到存储属性,该函数将返回非零值, pvData 指向 属性, 而印刷板数据 指向字符串的长度。 如果未找到 store 属性,则函数返回零, GetLastError 返回CRYPT_E_NOT_FOUND。
注解
应用商店属性标识符是适用于整个存储区的属性。 它们不是单个 证书的属性、 证书吊销列表 (CRL) 或 证书信任列表 (CTL) 上下文。 目前,不保留任何存储属性。
若要查找存储的本地化名称,还可以使用 CryptFindLocalizedName 函数。
示例
以下示例演示如何查询存储的本地名称属性。 类似的代码可用于检索其他存储属性。 有关使用此函数的完整示例,请参阅 示例 C 程序:设置和获取证书存储属性。
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
//--------------------------------------------------------------------
// Declare and initialize variables.
void *pvData = NULL;
DWORD cbData = 0;
//--------------------------------------------------------------------
// Call CertGetStoreProperty a first time
// to get the length of the store name string to be returned.
// hCertStore is a previously assigned HCERTSTORE variable that
// represents an open certificate store.
if(CertGetStoreProperty(
hCertStore,
CERT_STORE_LOCALIZED_NAME_PROP_ID,
NULL, // NULL on the first call
// to establish the length of the string
// to be returned
&cbData))
{
printf("The length of the property is %d. \n",cbData);
}
else
{
printf("The length of the property was not calculated.\n");
exit(1);
}
//--------------------------------------------------------------------
// cbData is the length of a string to be allocated.
// Allocate the space for the string and call the function a
// second time.
if(pvData = malloc(cbData))
{
printf("%d bytes of memory allocated.\n",cbData);
}
else
{
printf("Memory was not allocated.\n");
exit(1);
}
// Call CertGetStoreProperty a second time
// to copy the local store name into the pvData buffer.
if(CertGetStoreProperty(
hCertStore,
CERT_STORE_LOCALIZED_NAME_PROP_ID,
pvData,
&cbData))
{
printf("The localized name is %S.\n",pvData);
}
else
{
printf("CertGetStoreProperty failed.\n");
exit(1);
}
// Free memory when done.
if (pvData)
free(pvData);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |