ICertConfig
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ICertConfig インターフェイスは、証明書サービス (Certificate Services) サーバーの公開構成データ (クライアントのセットアップ時に指定される) を取得する機能を提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
指定された構成ポイントでインデックス付けされた証明書サービス サーバー構成を指すように、構成クエリの状態をリセットします。このメソッドは、ICertConfig インターフェイスで最初に定義されました。
| Index | INT | in | 証明書サービス サーバー構成をインデックス付けするために構成クエリが使用する構成ポイントを指定します。最初の構成のインデックスは 0 です。 |
| pCount | INT* | out | エンタープライズ内の構成の数へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pCount パラメーターはエンタープライズ内の構成の数を格納する Long を指します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
VB
戻り値は、エンタープライズ内の構成の数です。構成ポイント内で次に利用可能な証明書サービス サーバー構成のインデックスを取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。
| pIndex | INT* | out | 列挙された構成のインデックスを格納する Long 変数へのポインター。列挙する構成がこれ以上ない場合は –1 になります。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pIndex パラメーターには列挙された構成のインデックスが格納されます。列挙する構成がこれ以上ない場合、戻り値は S_FALSE となり、pIndex パラメーターは –1 の値を指します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
VB
構成ポイント内で次に利用可能な証明書サービス サーバー構成のインデックスを指定する値を返します。利用可能な構成がこれ以上ない場合、メソッドは –1 の値を返します。構成データベースの現在のレコードから特定のフィールドを取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。
| strFieldName | LPWSTR | in | 返すフィールドの名前を指定します。このパラメーターには、フィールド名として有効な次の文字列のいずれかを指定できます (証明機関 (CA) によっては、各フィールドのデータを提供しない場合があります)。
| ||||||||||||||||||||||||||||||||||||
| pstrOut | LPWSTR* | out | フィールドのデータを受け取る BSTR へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して pbstrOut を解放します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
VB
戻り値は、フィールドのデータを表す文字列です。解説(Remarks)
このメソッドは、指定されたフィールドのフィールド データを返します。
strFieldName パラメーターに "Flags" を指定した場合、取得されるフラグ フィールドのデータは、C ライブラリ関数 _wtoi によって整数に変換できる文字列です。得られる整数はビット フィールドを表し、これを調べることでフラグ CAIF_DSENTRY と CAIF_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);
証明書サービス サーバーの構成文字列を取得します。このメソッドは、ICertConfig インターフェイスで最初に定義されました。
| Flags | INT | in | 使用する証明機関 (CA) を指定する値。このパラメーターには、次の値のいずれかを指定できます。
| ||||||||||||||
| pstrOut | LPWSTR* | 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 公式リファレンス: 英語 (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 不要)。#define global IID_ICertConfig "{372FCE34-4324-11D0-8810-00A0C903B83C}" #usecom global ICertConfig IID_ICertConfig "{}" #comfunc global ICertConfig_Reset 7 int,sptr #comfunc global ICertConfig_Next 8 sptr #comfunc global ICertConfig_GetField 9 wstr,sptr #comfunc global ICertConfig_GetConfig 10 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。