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

IEnumCERTVIEWATTRIBUTE

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

公式ドキュメント

行列挙シーケンスの現在の行に対応する証明書属性を格納する、属性列挙シーケンスを表します。

メソッド 6

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

vtbl 7 HRESULT Next(INT* pIndex)

属性列挙シーケンス内の次の属性へ移動します。

pIndexINT*inout参照される次の属性のインデックス値を格納する変数へのポインター。列挙する属性がこれ以上ない場合、この変数には –1 が設定されます。pIndexNULL の場合、このメソッドは失敗します。

戻り値

C++

メソッドが成功した場合、S_OK を返し、属性列挙シーケンスは次の属性を参照している状態になります。属性がこれ以上ない場合、メソッドは S_FALSE を返し、pIndex には –1 の値が設定されます。

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

VB

戻り値は、属性列挙シーケンスが現在参照している属性のインデックス値です。列挙する属性がこれ以上ない場合、戻り値は –1 です。

解説(Remarks)

このメソッドが正常に完了すると、属性の名前と値には 次のメソッドを通じてアクセスできます:

LONG       Index;
HRESULT    hr;
BSTR       bstrAttribName = NULL;

// pEnumAttr は事前にインスタンス化された IEnumCERTVIEWATTRIBUTE オブジェクト
while (S_OK == pEnumAttr->Next(&Index))
{
    // 属性名を取得する
    hr = pEnumAttr->GetName(&bstrAttribName);
    if (FAILED(hr))
        printf("Failed GetName -  %x\n", hr );
    else
        printf("Attribute name: %ws\n", bstrAttribName);
}

// リソースを解放する
if (NULL != bstrAttribName)
    SysFreeString(bstrAttribName);
vtbl 8 HRESULT GetName(LPWSTR* pstrOut)

属性列挙シーケンス内の現在の属性の名前を取得します。

pstrOutLPWSTR*inout属性の名前を格納する BSTR 型の変数へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、pstrOut パラメーターに属性の名前が格納されます。

このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、この変数のアドレスを pstrOut として渡します。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

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

VB

戻り値は、属性の名前を格納する String です。

解説(Remarks)

このメソッドは、属性列挙シーケンスが現在参照している 属性の名前を取得するために使用します。

属性列挙シーケンスが有効な属性を参照していない場合、GetName は失敗します。列挙内を移動するには、次のいずれかのメソッドを使用してください:

BSTR    bstrAttribName = NULL;

// pEnumAttr は事前にインスタンス化された IEnumCERTVIEWATTRIBUTE オブジェクト
hr = pEnumAttr->GetName(&bstrAttribName);
if (S_OK != hr)
    printf("Failed call to GetName - %x\n", hr);
else
    printf("Attribute name is %ws\n", bstrAttribName );

// 完了したらメモリを解放する
if (NULL != bstrAttribName)
    SysFreeString(bstrAttribName);
vtbl 9 HRESULT GetValue(LPWSTR* pstrOut)

属性列挙シーケンス内の現在の属性の値を取得します。

pstrOutLPWSTR*inout属性の値を格納する BSTR 型へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、pstrOut に現在の属性の値が設定されます。

このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、この変数のアドレスを pstrOut として渡します。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

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

VB

戻り値は、現在の属性の値を表す String です。

解説(Remarks)

このメソッドは、属性列挙シーケンスが現在参照している 属性のデータを取得するために使用します。

属性列挙シーケンスが有効な属性を参照していない場合、GetValue は失敗します。列挙内を移動するには、 次のいずれかのメソッドを使用してください:

BSTR    bstrAttribValue = NULL;

// pEnumAttr は事前にインスタンス化された IEnumCERTVIEWATTRIBUTE オブジェクト
hr = pEnumAttr->GetValue(&bstrAttribValue);
if (S_OK != hr)
    printf("Failed call to GetValue - %x\n", hr);
else
    printf("Attribute value is %ws\n",bstrAttribValue);

// 完了したらメモリを解放する
if (NULL != bstrAttribValue)
    SysFreeString(bstrAttribValue);
vtbl 10 HRESULT Skip(INT celt)

属性列挙シーケンス内で指定した数の属性をスキップします。

celtINTinスキップする属性の数。celt パラメーターに正の値を指定すると、属性列挙シーケンスはシーケンス内を前方へスキップします。celt パラメーターに負の値を指定すると、属性列挙シーケンスはシーケンス内を後方へスキップします。

戻り値

VB

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

戻り値が E_INVALIDARG の場合、celt パラメーターの負の値によって属性列挙シーケンスのインデックスがゼロ未満になったことを示します。

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

解説(Remarks)

このメソッドが正常に完了したら、 IEnumCERTVIEWATTRIBUTE::Next メソッドを呼び出して、属性列挙シーケンス内の現在の属性を参照します。属性の名前と値には、次のメソッドを通じてアクセスできます:

属性列挙シーケンスは、ゼロから始まる内部インデックスを保持します。Skip メソッドを呼び出すと、このインデックスは celt パラメーターで指定された属性の数だけ増加または減少します。

celt パラメーターの負の値によってインデックスがゼロ未満になった場合、以降の IEnumCERTVIEWATTRIBUTE::Next の呼び出しの動作は未定義となります。

celt パラメーターの正の値によってインデックスが列挙シーケンスの最後の属性を超えた場合、以降の IEnumCERTVIEWATTRIBUTE::Next メソッドの呼び出しは失敗します。

HRESULT  hr;
LONG     Index;

// pEnumAttr は事前にインスタンス化された IEnumCERTVIEWATTRIBUTE オブジェクト
// 次の 5 個の属性をスキップする
hr = pEnumAttr->Skip(5);
if (S_OK == hr)
{
    // 次の属性を取得する
    hr = pEnumAttr->Next(&Index);
    if (S_OK == hr)
    {
        // 必要に応じてこの属性を使用する。
    }
}
vtbl 11 HRESULT Reset()

属性列挙シーケンスの先頭へ移動します。

戻り値

VB

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

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

解説(Remarks)

このメソッドが正常に完了したら、 IEnumCERTVIEWATTRIBUTE::Next メソッドを呼び出して、属性列挙シーケンス内の最初の属性を参照します。属性の名前と値には、次のメソッドを使用してアクセスできます:

// pEnumAttr は事前にインスタンス化された
// IEnumCERTVIEWATTRIBUTE オブジェクト。
HRESULT  hr;
LONG     Index;

hr = pEnumAttr->Reset();
if (S_OK != hr)
    printf("Unable to reset pEnumAttr - %x\n", hr );


    // 適切なエラーハンドラーを呼び出して終了処理を行う。
else
{

    // 再び属性の先頭にリセットする。
    while (S_OK == pEnumAttr->Next(&Index))
    {

        // 必要に応じて各属性を使用する。
    }
}
vtbl 12 HRESULT Clone(IEnumCERTVIEWATTRIBUTE** ppenum)

属性列挙シーケンスオブジェクトのコピーを、その現在の状態で作成します。

ppenumIEnumCERTVIEWATTRIBUTE**outIEnumCERTVIEWATTRIBUTE 型のポインターへのポインター。ppenumNULL の場合、この関数は失敗します。

戻り値

C++

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

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

VB

戻り値は、複製された属性列挙シーケンスオブジェクトです。

解説(Remarks)

属性列挙シーケンスオブジェクトは、 IEnumCERTVIEWROW::EnumCertViewAttribute メソッドの呼び出しによって取得されます。

// pEnumAttr は事前にインスタンス化された IEnumCERTVIEWATTRIBUTE オブジェクト
IEnumCERTVIEWATTRIBUTE * pEnumAttr2 = NULL;
HRESULT    hr;
hr = pEnumAttr->Clone(&pEnumAttr2);
if (S_OK != hr)
    printf("Unable to clone IEnumCERTVIEWATTRIBUTE\n");
else
{
    // 必要に応じて複製したオブジェクトを使用する
    // ...
}
// 複製したオブジェクトの使用が終わったら、メモリを解放する
if (NULL != pEnumAttr2)
    pEnumAttr2->Release();
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IEnumCERTVIEWATTRIBUTE "{E77DB656-7653-11D1-9BDE-00C04FB683FA}"
#usecom global IEnumCERTVIEWATTRIBUTE IID_IEnumCERTVIEWATTRIBUTE "{}"
#comfunc global IEnumCERTVIEWATTRIBUTE_Next      7 var
#comfunc global IEnumCERTVIEWATTRIBUTE_GetName   8 var
#comfunc global IEnumCERTVIEWATTRIBUTE_GetValue  9 var
#comfunc global IEnumCERTVIEWATTRIBUTE_Skip      10 int
#comfunc global IEnumCERTVIEWATTRIBUTE_Reset     11
#comfunc global IEnumCERTVIEWATTRIBUTE_Clone     12 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。