ICertEncodeAltName
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
証明書の拡張で使用される代替名 (alternate name) を処理するためのメソッドを提供します。
メソッド 7
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
Abstract Syntax Notation One (ASN.1) でエンコードされた代替名拡張をデコードし、結果として得られる文字列の配列を CertEncodeAltName オブジェクトに格納します。
| strBinary | LPWSTR | in | ASN.1 でエンコードされた代替名拡張を表します。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
代替名配列に含まれる名前の数を返します。
| pNameCount | INT* | out | 配列に含まれる代替名の数。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、配列に含まれる代替名の数です。代替名配列の指定されたインデックスにある名前の選択肢 (name choice) を返します。
| NameIndex | INT | in | 代替名エントリのインデックスを指定します。最初のエントリはインデックス 0 です。 |
| pNameChoice | INT* | out | 名前の選択肢の指定子を受け取る LONG へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pNameChoice パラメーターは代替名の種類を示す値を指します。これは次のいずれかの値です。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、指定されたインデックスにある名前の選択肢です。名前の選択肢は代替名の種類を示し、正しく使用できるようにします。次のいずれかの値でなければなりません。| 戻りコード | 説明 |
|---|---|
| 名前はディレクトリ名です。 | |
| 名前は Host.Entity.Domain の形式の DNS (Domain Name System) 名を含む IA5 文字列です。 | |
| 名前はインターネットプロトコルアドレスを表すオクテット文字列です。 | |
| 名前は登録済みの オブジェクト識別子 (OID) です。 | |
| 名前はメールアドレスです。 | |
| 名前は Service://HostName/Path の形式の URL を含む IA5 文字列です。 | |
| 名前は OID とバイナリの BLOB で構成されます。 |
代替名配列から指定された名前を返します。
| NameIndex | INT | in | 取得する代替名エントリのインデックスを指定する 0 から始まるインデックス。 CERT_ALT_NAME_OTHER_NAME 名の オブジェクト識別子 (OID) を取得するには、インデックス値を EAN_NAMEOBJECTID (0x80000000 として定義) とビットごとの OR 演算で組み合わせます。それ以外の場合は、バイナリ値が取得されます。名前の種類を判別するには、ICertEncodeAltName::GetNameChoice メソッドを呼び出します。 |
| pstrName | LPWSTR* | out | 代替名を受け取る BSTR へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、指定されたインデックスにある代替名です。戻り値は Unicode 文字列です。このオブジェクト内の代替名配列のサイズを指定します。配列内のすべての要素の値は 0 に設定されます。
| NameCount | INT | in | 配列内の要素数を指定します。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
代替名配列の指定されたインデックスに名前を設定します。
| NameIndex | INT | in | 設定する代替名エントリのインデックスを指定する 0 から始まるインデックス。 NameChoice パラメーターが CERT_ALT_NAME_OTHER_NAME の場合、OID を設定するには、インデックス値を EAN_NAMEOBJECTID (0x80000000 として定義) と OR (|) で組み合わせます。それ以外の場合は、バイナリ値が設定されます。 | ||||||||||||||||
| NameChoice | CERT_ALT_NAME | in | 名前の選択肢を指定します。名前の選択肢は代替名の種類を示し、正しく使用できるようにします。次のいずれかの値でなければなりません。
| ||||||||||||||||
| strName | LPWSTR | in | 代替名を指定します。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
このオブジェクトに格納されている代替名配列の ASN.1 でエンコードされた文字列を返します。オブジェクト内の名前はエンコードされません。
| pstrBinary | LPWSTR* | out | ASN.1 でエンコードされた代替名拡張を受け取る BSTR へのポインター。完了したら、SysFreeString を呼び出して pbstrBinary を解放します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、ASN.1 でエンコードされた代替名配列です。Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICertEncodeAltName "{1C9A8C70-1271-11D1-9BD4-00C04FB683FA}" #usecom global ICertEncodeAltName IID_ICertEncodeAltName "{}" #comfunc global ICertEncodeAltName_Decode 7 wstr #comfunc global ICertEncodeAltName_GetNameCount 8 var #comfunc global ICertEncodeAltName_GetNameChoice 9 int,var #comfunc global ICertEncodeAltName_GetName 10 int,var #comfunc global ICertEncodeAltName_Reset 11 int #comfunc global ICertEncodeAltName_SetNameEntry 12 int,int,wstr #comfunc global ICertEncodeAltName_Encode 13 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICertEncodeAltName "{1C9A8C70-1271-11D1-9BD4-00C04FB683FA}" #usecom global ICertEncodeAltName IID_ICertEncodeAltName "{}" #comfunc global ICertEncodeAltName_Decode 7 wstr #comfunc global ICertEncodeAltName_GetNameCount 8 sptr #comfunc global ICertEncodeAltName_GetNameChoice 9 int,sptr #comfunc global ICertEncodeAltName_GetName 10 int,sptr #comfunc global ICertEncodeAltName_Reset 11 int #comfunc global ICertEncodeAltName_SetNameEntry 12 int,int,wstr #comfunc global ICertEncodeAltName_Encode 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。