ICertConfig::GetConfig 方法 (certcli.h)

GetConfig 方法检索证书服务服务器的配置字符串。 此方法首先在 ICertConfig 接口中定义。

配置字符串是服务器名称和 证书颁发机构 名称,由反斜杠 (\) 分隔;例如: ServerName\CAName。 此配置字符串可用于明确引用特定的证书服务服务器。 有关详细信息,请参阅“备注”。

语法

HRESULT GetConfig(
  [in]  LONG Flags,
  [out] BSTR *pstrOut
);

参数

[in] Flags

指定要使用的证书颁发机构的值。 此参数的取值可为下列值之一:

含义
CC_DEFAULTCONFIG
0x00000000
检索默认证书颁发机构。
CC_FIRSTCONFIG
0x00000002
返回第一个证书颁发机构。
CC_LOCALACTIVECONFIG
0x00000004
检索本地证书颁发机构(如果正在运行)。
CC_LOCALCONFIG
0x00000003
检索本地证书颁发机构。
CC_UIPICKCONFIG
0x00000001
显示允许用户选择证书颁发机构的用户界面。
CC_UIPICKCONFIGSKIPLOCALCA
0x00000005
显示允许用户选择证书颁发机构的用户界面。 UI 不包括任何本地证书颁发机构。 当从属证书颁发机构证书请求提交到当前证书颁发机构以外的证书颁发机构时,此排除在从属证书颁发机构证书续订期间非常有用。

[out] pstrOut

指向包含配置的 BSTR 的指针。 使用完配置后,调用 SysFreeString 函数以释放 pbstrOut

返回值

C++

如果方法成功,该方法将返回S_OK。

如果方法失败,它将返回一个 指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 通用 HRESULT 值

VB

返回值是包含配置的字符串。

注解

证书颁发机构 (CA) 此函数返回的配置字符串的名称部分是在证书服务设置过程中输入的确切文本。 请注意,此文本可能与在文件名 ((例如 证书吊销列表) 或注册表项)中找到的 CA 名称的形式不同。 这是因为文件名和注册表项使用 CA 名称的 清理 版本。

若要删除文件名、注册表项名称或可分辨名称值非法或因证书服务特定原因而非法的字符,必须执行清理 CA 名称的过程。 在清理过程中,公用名中的任何非法字符都转换为格式为五个字符的表示形式 xxxx,其中 用作转义字符, xxxx 表示四个唯一标识要转换的字符的十六进制数字。

例如,Active Directory 中的可分辨名称中不允许使用数字符号 (#) 。 如果在安装过程中输入的 CA 名称为 #YourName,则经过清理的 CA 名称将为 !0023YourName

如果在安装过程中为 CA 的公用名称输入以下字符,则会转换为 清理过程中的 xxxx 格式。 此列表可能随时变动。

名称 字符 !xxxx 格式的值
& 号 & !0026
撇号 ' !0027
星号 * !002a
反斜杠 \ !005c
左大括号 { !007b
右大括号 } !007d
左中括号 [ !005b
右中括号 ] !005d
西文插入记号 ^ !005e
冒号 : !003a
逗号 , !002c
等于号 = !003d
感叹 号 ! !0021
重音严重 ` !0060
大于号 > !003e
小于号 < !003c
数字符号 # !0023
左括号 ( !0028
右括号 ) !0029
百分比 % !0025
管道 | !007c
正号 + !002b
问号 ? !003f
引号 " !0022
分号 ; !003b
左斜线 / !002f
 

任何非打印字符和所有不是 7 位的 Unicode 字符也会转换为 xxxx 格式。

当经过清理的名称对于 64 个字符的目录服务相对可分辨名称 (RDN) 时,将生成经过清理的短名称。 经过清理的短名称包含截断并追加完整清理名称的 哈希 。 已清理的短名称保留 64 个字符中的一些字符,以包含 证书吊销列表 (CRL) 后缀,例如 (123) 。

此方法返回的配置字符串的证书颁发机构名称部分是在安装过程中输入的原始文本。 请注意,需要证书颁发机构名称作为参数的证书服务方法接受最初输入的证书颁发机构名称。 例如,对于证书颁发机构名称 #YourName,为
ICertView2::OpenConnection 方法接受 #YourName 作为参数的证书颁发机构部分。

示例

以下示例演示如何使用此方法检索默认证书颁发机构配置字符串。


    ICertConfig2 * pConfig = NULL;
    BSTR  bstrConfig = NULL; //Contains CA configuration name
    HRESULT    hr;

    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx - [%x]\n", hr);
        goto error;
    }

    // Create an instance of the CertConfig object.
    hr = CoCreateInstance( CLSID_CCertConfig,
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           IID_ICertConfig2,
                           (void **)&pConfig);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance - pConfig [%x]\n", hr);
        goto error;
    }

    // Retrieve the default CA configuration string.
    hr = pConfig->GetConfig(CC_DEFAULTCONFIG, &bstrConfig);
    if (FAILED(hr))
    {
        printf("Failed GetConfig - [%x]\n", hr);
        goto error;
    }
    else
        printf("GetConfig returned: %ws\n", bstrConfig );

error:

    // Done processing.
    if (pConfig)
        pConfig->Release();

    if (bstrConfig)
        SysFreeString(bstrConfig);

    CoUninitialize();

要求

要求
最低受支持的客户端 无受支持的版本
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 certcli.h (包括 Certsrv.h)
Library Certidl.lib
DLL Certcli.dll

另请参阅

CCertConfig

ICertConfig

ICertView2::OpenConnection