ICertGetConfig
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
Certificate Services サーバーのパブリック構成データ(クライアントのセットアップ時に指定される)を取得する機能を提供します。
メソッド 1
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ICertGetConfig::GetConfig メソッドは、Certificate Services サーバーの構成文字列を取得します。
| Flags | CERT_GET_CONFIG_FLAGS | in | 使用する CA を指定する値です。このパラメーターには、次のいずれかの値を指定できます。
| ||||||||||||||
| pstrOut | LPWSTR* | out | 構成を格納する BSTR へのポインターです。構成の使用が終わったら、SysFreeString 関数を呼び出して pbstrOut を解放してください。 |
戻り値
関数が成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値はエラーを示す HRESULT です。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
この関数が返す構成文字列の 証明機関 (CA) 名の部分は、Certificate Services のセットアップ処理中に入力された正確なテキストです。このテキストは、ファイル名(証明書失効リスト用など)やレジストリキーに含まれる CA 名の形式とは異なる場合があることに注意してください。これは、ファイル名やレジストリキーでは CA 名のサニタイズされたバージョンが使用されるためです。
CA 名をサニタイズする処理は、ファイル名、レジストリキー名、識別名の値として使用できない文字、または Certificate Services 固有の理由で使用できない文字を削除するために必要です。サニタイズ処理では、コモンネーム内の使用できない文字はすべて !xxxx という形式の 5 文字表現に変換されます。ここで、感嘆符 (!) はエスケープ文字として使用され、xxxx は変換対象の文字を一意に識別する 4 桁の 16 進数を表します。
たとえば、番号記号 (#) は Active Directory ディレクトリサービスの識別名では許可されていません。セットアップ時に入力された CA 名が #YourName の場合、サニタイズされた CA 名は !0023YourName になります。
次の文字は、セットアップ時に CA のコモンネームとして入力された場合、サニタイズ処理中に !xxxx 形式に変換されます。この一覧は変更される可能性があります。
| 文字 | !xxxx 形式での値 |
|---|---|
| < | !003c |
| > | !003e |
| " | !0022 |
| / | !002f |
| \ | !005c |
| : | !003a |
| | | !007c |
| ? | !003f |
| * | !002a |
| # | !0023 |
| , | !002c |
| + | !002b |
| ; | !003b |
| ! | !0021 |
印刷不可能な文字、および 7 ビットに収まらないすべての Unicode 文字も !xxxx 形式に変換されます。
サニタイズされた名前が 64 文字のディレクトリサービスの相対識別名 (RDN) には長すぎる場合、サニタイズされた短い名前が生成されます。サニタイズされた短い名前は、サニタイズされた名前を切り詰め、完全なサニタイズされた名前のハッシュを付加したもので構成されます。サニタイズされた短い名前は、(123) のような証明書失効リスト (CRL) のサフィックスを格納するために、64 文字の一部を予約します。
このメソッドが返す構成文字列の CA 名の部分は、セットアップ時に入力された元のテキストです。CA 名をパラメーターとして必要とする Certificate Services のメソッドは、最初に入力された CA 名を受け付けることに注意してください。たとえば、CA 名 #YourName の場合、 ICertView2::OpenConnection メソッドはパラメーターの CA 部分として #YourName を受け付けます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICertGetConfig "{C7EA09C0-CE17-11D0-8833-00A0C903B83C}" #usecom global ICertGetConfig IID_ICertGetConfig "{}" #comfunc global ICertGetConfig_GetConfig 7 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICertGetConfig "{C7EA09C0-CE17-11D0-8833-00A0C903B83C}" #usecom global ICertGetConfig IID_ICertGetConfig "{}" #comfunc global ICertGetConfig_GetConfig 7 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。