IObjectId
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
オブジェクト識別子 (OID) を表します。
メソッド 8
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
CERTENROLL_OBJECTID 列挙値からオブジェクトを初期化します。
| Name | CERTENROLL_OBJECTID | in | CERTENROLL_OBJECTID 列挙値。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| OID 情報が見つかりませんでした。 | |
| アルゴリズム名が認識されません。 | |
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
CERTENROLL_OBJECTID の各値は、ASN.1 オブジェクト識別子に関連付けられています。たとえば、XCN_OID_ECDSA_SHA1 という値は、1.2.840.10045.4.1 を含む文字列に関連付けられています。これは、iso(1)member-body(2)us(840)10045 signatures(4)sha1(1) オブジェクト識別子のドット区切り 10 進数表記です。
InitializeFromName メソッドは、ASN.1 オブジェクト識別子に関連付けられた情報をレジストリから検索します。情報が見つかった場合、このメソッドは内部で CRYPT_OID_INFO 構造体を設定し、それをオブジェクトに関連付けます。また、可能であれば、ローカル情報を使用してオブジェクトの表示名を初期化します。
初期化された IObjectId オブジェクトに関する情報を取得するには、以下のプロパティを呼び出すことができます。
ドット区切り 10 進数のオブジェクト識別子 (OID) を含む文字列からオブジェクトを初期化します。
| strValue | LPWSTR | in | ASN.1 オブジェクト識別子のドット区切り 10 進数表記を含む BSTR 変数。たとえば、1.2.840.10045.4.1. という値は、iso(1)member-body(2)us(840)10045 signatures(4)sha1(1) オブジェクト識別子を表します。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| OID 情報が見つかりませんでした。 | |
| アルゴリズム名が認識されません。 | |
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
初期化された IObjectId オブジェクトに関する情報を取得するには、以下のプロパティを呼び出すことができます。
アルゴリズム名またはオブジェクト識別子からオブジェクトを初期化します。
| GroupId | ObjectIdGroupId | in | 検索する OID グループを指定する ObjectIdGroupId 列挙値。以下のいずれかのアルゴリズムグループを指定できます。 さらに、暗号化アルゴリズムを含まないグループを指定することもできます。 |
| KeyFlags | ObjectIdPublicKeyFlags | in | 署名アルゴリズムと暗号化アルゴリズムのどちらを検索するかを指定する ObjectIdPublicKeyFlags 列挙値。以下のいずれかの値を指定できます。 いずれの値も、RSA のように暗号化とメッセージ署名の両方に使用できるアルゴリズムを区別するために使用できます。この場合、GroupId パラメーターに XCN_CRYPT_PUBKEY_ALG_OID_GROUP_ID も指定する必要があります。 |
| AlgFlags | AlgorithmFlags | in | AlgorithmFlags 列挙値。以下のいずれかの値を指定できます。
|
| strAlgorithmName | LPWSTR | in | 名前を含む BSTR 変数。名前、またはドット区切り 10 進数形式の OID を指定できます。このメソッドは、形式が ASN.1 X.208 標準に準拠していることを検証します。CNG アルゴリズム名の詳細については、CNG Algorithm Identifiers を参照してください。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| OID 情報が見つかりませんでした。 | |
| アルゴリズム名が認識されません。 | |
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
GroupId パラメーターの上位 16 ビットを使用して、可変ビット長を受け入れるアルゴリズムのキーサイズを指定できます。たとえば、192 ビットの AES アルゴリズムから IObjectId オブジェクトを初期化するには、strAlgorithmName パラメーターに "AES" を指定し、長さを 16 ビット左シフトして、シフトしたビット長と GroupId 値をビットごとの OR で結合します。
オブジェクト識別子を含む CERTENROLL_OBJECTID 値を取得します。
| pValue | CERTENROLL_OBJECTID* | out | この OID に対応する既知の名前を受け取る CERTENROLL_OBJECTID へのポインタである。 |
解説(Remarks)
このプロパティ値を取得する前に、以下のいずれかのメソッドを呼び出す必要があります。
以下のプロパティ値も取得できます。
オブジェクト識別子の表示名を指定および取得します。(Get)
| pValue | LPWSTR* | out | OID の表示名 (フレンドリ名) を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティ値を取得する前に、以下のいずれかのメソッドを呼び出す必要があります。
以下のプロパティ値も取得できます。
オブジェクト識別子の表示名を指定および取得します。(Put)
| Value | LPWSTR | in | OID に設定する表示名 (フレンドリ名) を指定する。 |
解説(Remarks)
このプロパティ値を取得する前に、以下のいずれかのメソッドを呼び出す必要があります。
以下のプロパティ値も取得できます。
ドット区切り 10 進数のオブジェクト識別子 (OID) を含む文字列を取得します。
| pValue | LPWSTR* | out | OID 値 (ドット区切り文字列) を受け取る文字列ポインタである。 |
解説(Remarks)
ドット区切り 10 進数形式については、ASN.1 X.208 仕様で説明されています。たとえば、1.2.840.10045.4.1. という文字列は、iso(1)member-body(2)us(840)10045 signatures(4)sha1(1) オブジェクト識別子を表します。
このプロパティ値を取得する前に、以下のいずれかのメソッドを呼び出す必要があります。
以下のプロパティ値も取得できます。
アルゴリズムのオブジェクト識別子 (OID) に関連付けられた表示名を取得します。
| GroupId | ObjectIdGroupId | in | 検索する OID グループを指定する ObjectIdGroupId 列挙値。以下のいずれかのアルゴリズムグループを指定できます。 さらに、暗号化アルゴリズムを含まないグループを指定することもできます。 |
| KeyFlags | ObjectIdPublicKeyFlags | in | 署名アルゴリズムと暗号化アルゴリズムのどちらを検索するかを指定する ObjectIdPublicKeyFlags 列挙値。以下のいずれかの値を指定できます。
|
| pstrAlgorithmName | LPWSTR* | out | 名前を含む BSTR 変数へのポインター。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| アルゴリズム名を含む文字列が空です。 | |
| アルゴリズム名が見つかりませんでした。GetAlgorithmName を呼び出す前に InitializeFromAlgorithmName を呼び出す必要があります。 |
解説(Remarks)
XCN_CRYPT_ENCRYPT_ALG_OID_GROUP_ID 定数を使用して、可変ビット長で識別できるアルゴリズムのキーサイズを考慮した GroupId パラメーター値を作成できます。たとえば、192 ビットの AES アルゴリズムから IObjectId オブジェクトを初期化するには、strAlgorithmName パラメーターに "AES" を指定し、長さを 16 ビット左シフトして、シフトしたビット長と XCN_CRYPT_ENCRYPT_ALG_OID_GROUP_ID をビットごとの OR で結合します。
GroupId パラメーターに XCN_CRYPT_PUBKEY_ALG_OID_GROUP_ID 以外を設定する場合は、KeyFlags パラメーターに XCN_CRYPT_OID_INFO_PUBKEY_ANY を指定してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IObjectId "{728AB300-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IObjectId IID_IObjectId "{}" #comfunc global IObjectId_InitializeFromName 7 int #comfunc global IObjectId_InitializeFromValue 8 wstr #comfunc global IObjectId_InitializeFromAlgorithmName 9 int,int,int,wstr #comfunc global IObjectId_get_Name 10 var #comfunc global IObjectId_get_FriendlyName 11 var #comfunc global IObjectId_put_FriendlyName 12 wstr #comfunc global IObjectId_get_Value 13 var #comfunc global IObjectId_GetAlgorithmName 14 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IObjectId "{728AB300-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IObjectId IID_IObjectId "{}" #comfunc global IObjectId_InitializeFromName 7 int #comfunc global IObjectId_InitializeFromValue 8 wstr #comfunc global IObjectId_InitializeFromAlgorithmName 9 int,int,int,wstr #comfunc global IObjectId_get_Name 10 sptr #comfunc global IObjectId_get_FriendlyName 11 sptr #comfunc global IObjectId_put_FriendlyName 12 wstr #comfunc global IObjectId_get_Value 13 sptr #comfunc global IObjectId_GetAlgorithmName 14 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。