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

另请参阅

CertSetStoreProperty

证书存储函数