Win32 API 日本語リファレンス
ホームSecurity.Cryptography.Certificates › ICertConfig

ICertConfig

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID372fce34-4324-11d0-8810-00a0c903b83c継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

ICertConfig インターフェイスは、証明書サービス (Certificate Services) サーバーの公開構成データ (クライアントのセットアップ時に指定される) を取得する機能を提供します。

メソッド 4

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT Reset(INT Index, INT* pCount)

指定された構成ポイントでインデックス付けされた証明書サービス サーバー構成を指すように、構成クエリの状態をリセットします。このメソッドは、ICertConfig インターフェイスで最初に定義されました。

IndexINTin証明書サービス サーバー構成をインデックス付けするために構成クエリが使用する構成ポイントを指定します。最初の構成のインデックスは 0 です。
pCountINT*outエンタープライズ内の構成の数へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、pCount パラメーターはエンタープライズ内の構成の数を格納する Long を指します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

VB

戻り値は、エンタープライズ内の構成の数です。
vtbl 8 HRESULT Next(INT* pIndex)

構成ポイント内で次に利用可能な証明書サービス サーバー構成のインデックスを取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。

pIndexINT*out列挙された構成のインデックスを格納する Long 変数へのポインター。列挙する構成がこれ以上ない場合は –1 になります。

戻り値

C++

メソッドが成功した場合、S_OK を返し、pIndex パラメーターには列挙された構成のインデックスが格納されます。列挙する構成がこれ以上ない場合、戻り値は S_FALSE となり、pIndex パラメーターは –1 の値を指します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

VB

構成ポイント内で次に利用可能な証明書サービス サーバー構成のインデックスを指定する値を返します。利用可能な構成がこれ以上ない場合、メソッドは –1 の値を返します。
vtbl 9 HRESULT GetField(LPWSTR strFieldName, LPWSTR* pstrOut)

構成データベースの現在のレコードから特定のフィールドを取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。

strFieldNameLPWSTRin

返すフィールドの名前を指定します。このパラメーターには、フィールド名として有効な次の文字列のいずれかを指定できます (証明機関 (CA) によっては、各フィールドのデータを提供しない場合があります)。

意味
Authority
参照する証明機関 (CA) の名前。
CommonName
サーバーのコモンネーム。
Config
参照するコンピューター\CA 名。
Country
国/地域。
Description
サーバーに関する説明的なコメント (廃止された "Comment" に代わるもの)。
ExchangeCertificate
交換証明書を格納するファイルの名前 (証明書サービス 1.0 にのみ適用されます)。
Flags
CA 情報が見つかった場所を表す文字列。詳細については、「解説」を参照してください。
Locality
市区町村。
Organization
組織。
OrgUnit
組織単位。
SanitizedName
GetConfig に記載されている規則に従って サニタイズ された CA 名。
SanitizedShortName
GetConfig に記載されている規則に従ってサニタイズおよび短縮された CA 名。
Server
参照するコンピューター名。
ShortName
SanitizedShortName ですが、GetConfig で説明されている '!xxx' シーケンスが元のテキストに変換されたもの。
SignatureCertificate
CA 証明書 (CA 署名証明書 とも呼ばれます) を格納するファイルの名前。これは ルート証明書 である場合とそうでない場合があります。
State
都道府県。
WebEnrollmentServers
Active Directory 内の特定の CA 構成に対する証明書登録 Web サービス URL の配列。

Windows Vista および Windows Storage Server 2003:  このフィールドはサポートされていません。

pstrOutLPWSTR*outフィールドのデータを受け取る BSTR へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して pbstrOut を解放します。

戻り値

C++

メソッドが成功した場合、S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

VB

戻り値は、フィールドのデータを表す文字列です。

解説(Remarks)

このメソッドは、指定されたフィールドのフィールド データを返します。

strFieldName パラメーターに "Flags" を指定した場合、取得されるフラグ フィールドのデータは、C ライブラリ関数 _wtoi によって整数に変換できる文字列です。得られる整数はビット フィールドを表し、これを調べることでフラグ CAIF_DSENTRYCAIF_SHAREDFOLDERENTRY が設定されているかどうかを判定できます。CAIF_DSENTRY (0x00000001) が設定されている場合、CA の情報はディレクトリ サービスに格納されていました。CAIF_SHAREDFOLDERENTRY (0x00000002) が設定されている場合、CA の情報は共有フォルダーに格納されていました。これらのフラグは一方または両方が設定される場合があることに注意してください。

    BSTR  bstrFieldName = NULL;
    BSTR  bstrFieldValue = NULL;
    HRESULT    hr;

    // Specify the field to retrieve, for example, "CommonName".
    bstrFieldName = SysAllocString(L"<FIELDNAMEHERE>");
    if (NULL == bstrFieldName)
    {
        printf("Memory allocation failed for bstrFieldName.\n");
        goto error;
    }

    // pConfig is a previously instantiated ICertConfig object.
    hr = pConfig->GetField(bstrFieldName, &bstrFieldValue);
    if (FAILED(hr))
    {
        printf("Failed GetField - [%x]\n", hr);
        goto error;
    }
    else
        printf("GetField value for %ws is: %ws\n", 
            bstrFieldName, bstrFieldValue );

error:

    if (bstrFieldName)
        SysFreeString(bstrFieldName);

    if (bstrFieldValue)
        SysFreeString(bstrFieldValue);
vtbl 10 HRESULT GetConfig(INT Flags, LPWSTR* pstrOut)

証明書サービス サーバーの構成文字列を取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。

FlagsINTin

使用する証明機関 (CA) を指定する値。このパラメーターには、次の値のいずれかを指定できます。

意味
CC_DEFAULTCONFIG
0x00000000
既定の証明機関を取得します。
CC_FIRSTCONFIG
0x00000002
最初の証明機関を返します。
CC_LOCALACTIVECONFIG
0x00000004
ローカルの証明機関が実行中の場合、それを取得します。
CC_LOCALCONFIG
0x00000003
ローカルの証明機関を取得します。
CC_UIPICKCONFIG
0x00000001
ユーザーが証明機関を選択できるユーザー インターフェイスを表示します。
CC_UIPICKCONFIGSKIPLOCALCA
0x00000005
ユーザーが証明機関を選択できるユーザー インターフェイスを表示します。この UI からはローカルの証明機関がすべて除外されます。この除外は、下位証明機関の証明書要求が現在の証明機関以外の証明機関に送信される、下位証明機関の証明書更新の際に役立ちます。
pstrOutLPWSTR*out構成を格納する BSTR へのポインター。構成の使用が終わったら、SysFreeString 関数を呼び出して pbstrOut を解放します。

戻り値

C++

メソッドが成功した場合、S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

VB

戻り値は、構成を格納する文字列です。

解説(Remarks)

この関数が返す構成文字列の 証明機関 (CA) 名の部分は、証明書サービスのセットアップ処理中に入力された正確なテキストです。このテキストは、(証明書失効リスト用などの) ファイル名やレジストリ キーに含まれる CA 名の形式とは異なる場合があることに注意してください。これは、ファイル名やレジストリ キーでは CA 名の サニタイズ されたバージョンが使用されるためです。

CA 名をサニタイズする処理は、ファイル名、レジストリ キー名、識別名 (DN) の値として無効な文字、あるいは証明書サービス固有の理由で無効な文字を取り除くために必要です。サニタイズ処理では、コモンネーム内の無効な文字はすべて !xxxx という形式の 5 文字の表現に変換されます。ここで ! はエスケープ文字として使用され、xxxx は変換対象の文字を一意に識別する 4 桁の 16 進数を表します。

たとえば、番号記号 (#) は 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) に対して長すぎる場合に生成されます。サニタイズされた短い名前は、サニタイズされた名前を切り詰め、完全なサニタイズされた名前の ハッシュ を付加したもので構成されます。サニタイズされた短い名前は、(123) のような 証明書失効リスト (CRL) のサフィックスを格納するために、64 文字のうちの一部を予約します。

このメソッドが返す構成文字列の証明機関名の部分は、セットアップ時に入力された元のテキストです。証明機関名をパラメーターとして要求する証明書サービスのメソッドは、元々入力された証明機関名を受け付けることに注意してください。たとえば、証明機関名 #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();
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ICertConfig "{372FCE34-4324-11D0-8810-00A0C903B83C}"
#usecom global ICertConfig IID_ICertConfig "{}"
#comfunc global ICertConfig_Reset      7 int,var
#comfunc global ICertConfig_Next       8 var
#comfunc global ICertConfig_GetField   9 wstr,var
#comfunc global ICertConfig_GetConfig  10 int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。