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

ICertView

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

公式ドキュメント

適切に権限を付与されたクライアントが、Certificate Services データベースのカスタマイズされたビューまたは完全なビューを作成できるようにします。

メソッド 8

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

vtbl 7 HRESULT OpenConnection(LPWSTR strConfig)

Certificate Services サーバーとの接続を確立します。

strConfigLPWSTRinCertificate Services サーバーの有効な構成文字列を表します。構成文字列は COMPUTERNAME\CANAME の形式で、COMPUTERNAME はサーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力された証明機関 (CA)のコモン名です。構成文字列名の詳細については、 ICertConfig を参照してください。

戻り値

VB

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

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

解説(Remarks)

このメソッドが正常に完了すると、 ICertView オブジェクトは strConfig パラメーターで指定された Certificate Services サーバーへの接続を保持します。

接続を閉じるには、Release 関数を呼び出します。

ICertView *   pCertView = NULL;
BSTR          strCertServ = NULL;
HRESULT       hr;

// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

if (FAILED(hr))
{
    printf("Failed CoInitializeEx\n");
    goto error;
}
// Get pointer to the ICertView interface.
hr = CoCreateInstance(CLSID_CCertView,
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      IID_ICertView,
                      (void **)&pCertView);
if (FAILED(hr))
{
    printf("Failed CoCreateInstance\n");
    goto error;
}
// The use of '\\' is necessary to represent a single backslash.
strCertServ = SysAllocString(TEXT("Server01\\ABCCertServ"));
// Open the connection to the Certificate Services server.
hr = pCertView->OpenConnection(strCertServ);
if (FAILED(hr))
{
    printf("Failed OpenConnection!\n");
    goto error;
}
else
    // Established successful connection; use view as appropriate.
    // ...
    // Done using objects; free resources.
error: 
    if (NULL != pCertView)
        pCertView->Release();
    if (NULL != strCertServ)
        SysFreeString(strCertServ);
    // Free COM resources.
    CoUninitialize();
vtbl 8 HRESULT EnumCertViewColumn(CVRC_COLUMN fResultColumn, IEnumCERTVIEWCOLUMN** ppenum)

データベーススキーマに対する列の列挙シーケンスのインスタンスを取得します。

fResultColumnCVRC_COLUMNin

対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。

意味
CVRC_COLUMN_SCHEMA
スキーマ列の情報。
CVRC_COLUMN_RESULT
結果列の情報。
CVRC_COLUMN_VALUE
値列の情報。
CVRC_COLUMN_MASK
列情報マスク。
ppenumIEnumCERTVIEWCOLUMN**outIEnumCERTVIEWCOLUMN 型のポインターへのポインター。ppenum パラメーターが NULL の場合、このメソッドは失敗します。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*ppenumIEnumCERTVIEWCOLUMN 型のポインターが設定されます。

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

VB

戻り値は IEnumCERTVIEWCOLUMN オブジェクトです。

解説(Remarks)

IEnumCERTVIEWCOLUMN オブジェクトを使用して、ビューの列を列挙し、各列の情報を取得できます。

vtbl 9 HRESULT GetColumnCount(CVRC_COLUMN fResultColumn, INT* pcColumn)

Certificate Services データベースのビュー内の列数を取得します。

fResultColumnCVRC_COLUMNin

対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。

意味
CVRC_COLUMN_SCHEMA
スキーマ列の情報。
CVRC_COLUMN_RESULT
結果列の情報。
CVRC_COLUMN_VALUE
値列の情報。
CVRC_COLUMN_MASK
列情報マスク。
pcColumnINT*inoutビュー内の列数を格納する変数へのポインター。pcColumn パラメーターが NULL の場合、この関数は失敗します。

戻り値

C++

メソッドが成功した場合、S_OK を返し、pcColumn パラメーターにビュー内の列数が設定されます。

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

VB

戻り値はビュー内の列数です。

解説(Remarks)

このメソッドは、ビュー内の列数を判別するために使用します。返される数値は、fResultColumnTRUE の場合は結果セットの列数を、fResultColumnFALSE の場合はデータベーススキーマ全体の列数を表します。

vtbl 10 HRESULT GetColumnIndex(CVRC_COLUMN fResultColumn, LPWSTR strColumnName, INT* pColumnIndex)

列の 0 から始まるインデックスを取得します。

fResultColumnCVRC_COLUMNin

対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。

意味
CVRC_COLUMN_SCHEMA
スキーマ列の情報。
CVRC_COLUMN_RESULT
結果列の情報。
CVRC_COLUMN_VALUE
値列の情報。
CVRC_COLUMN_MASK
列情報マスク。
strColumnNameLPWSTRinビュー内の列のローカライズされていない名前を格納する文字列。
pColumnIndexINT*inoutstrColumnName パラメーターで指定された列のインデックスを格納する変数のアドレス。pColumnIndexNULL の場合、このメソッドは失敗します。

戻り値

C++

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

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

VB

戻り値は列の 0 から始まるインデックスです。

解説(Remarks)

このメソッドは、strColumnName パラメーターで指定された列のインデックスを判別するために使用します。列のインデックスは 0 から始まります(最初の列はインデックス 0 です)。

vtbl 11 HRESULT SetResultColumnCount(INT cResultColumn)

Certificate Services データベースのカスタマイズされたビューの結果セットに対する最大列数を指定します。

cResultColumnINTin

結果セット内の最大列数を指定します。このパラメーターには正の数値を設定できます。また、Certificate Services データベースの行数を数えることだけが目的の場合は 0 を、あるいは次の定数のいずれかを設定できます。

意味
CV_COLUMN_LOG_DEFAULT
結果セット内の列数は、解決済みの要求に対する Certificate Services の既定の結果セットの列数になります。要求は、発行された証明書または失敗した要求のいずれかになった時点で解決済みとみなされます。失効した証明書は解決済みとみなされます。
CV_COLUMN_LOG_FAILED_DEFAULT
結果セット内の列数は、失敗した要求に対する Certificate Services の既定の結果セットの列数になります。
CV_COLUMN_QUEUE_DEFAULT
結果セット内の列数は、未解決の要求に対する Certificate Services の既定の結果セットの列数になります。

戻り値

VB

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

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

解説(Remarks)

SetResultColumnCount メソッドを呼び出す前に、まず OpenConnection メソッドを呼び出して Certificate Services サーバーとの接続を確立する必要があります。接続が確立された後、このメソッドを一度だけ呼び出して、結果セット内の最大列数を指定できます。

cResultColumn パラメーターに(定義済み定数ではなく)正の数値を設定した場合は、 SetResultColumn メソッドを呼び出して、結果セットに含める列を指定する必要があります。SetResultColumn は、SetResultColumnCount で指定された列数を超えて呼び出されると失敗する点に注意してください。

HRESULT    hr;
// Specify the result set for logged requests.
// pCertView is pointer to ICertView (which has an Open Connection)
hr = pCertView->SetResultColumnCount(CV_COLUMN_LOG_DEFAULT);
if (S_OK != hr)
    printf("Failed ICertView::SetResultColumnCount - %x\n", hr);
else
{
    // Retrieve data rows by means of ICertView::OpenView.
    // ...
}
vtbl 12 HRESULT SetResultColumn(INT ColumnIndex)

Certificate Services データベースのカスタマイズされたビューの結果セットに対する列を指定します。

ColumnIndexINTin結果セットに含める列の、0 から始まるインデックス。

戻り値

VB

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

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

解説(Remarks)

SetResultColumn メソッドを呼び出す前に、SetResultColumnCount メソッドを呼び出して、結果セットに含める列数を指定する必要があります。SetResultColumn メソッドの呼び出しは、次の条件下で失敗します。

列を指定した後、必要に応じて SetRestriction メソッドを呼び出して、その列の並べ替えおよび絞り込みの制限を指定できます。

結果セットに必要な列ごとに SetResultColumn メソッドを呼び出す必要があります。これらの呼び出しが正常に完了すると、各呼び出しで指定された列は、OpenView メソッドが呼び出されたときに結果セットに含まれます。

    HRESULT    hr;
    LONG       nCount;
    LONG       i;

    // Determine the number of columns in the entire database.
    // pCertView is a pointer to ICertView.
    hr = pCertView->GetColumnCount(FALSE, &nCount);
    if (FAILED(hr))
    {
        printf("Failed GetColumnCount - %x\n", hr);
        goto error;
    }
    hr = pCertView->SetResultColumnCount( nCount );
    if (FAILED(hr))
    {
        printf("Failed SetResultColumnCount - %x\n", hr);
        goto error;
    }
    // Place each column in the view.
    for (i = 0; i < nCount; i++)
    {
        hr = pCertView->SetResultColumn(i);
        if (FAILED(hr))
        {
            printf("Failed SetResultColumn (%d) - %x\n", i, hr );
            goto error;
        }
    }
    // Call ICertView::OpenView, and so on.
    // ...

error:
    {
         // Clean up resources, and so on.
    }
vtbl 13 HRESULT SetRestriction(CERT_VIEW_COLUMN_INDEX ColumnIndex, CERT_VIEW_SEEK_OPERATOR_FLAGS SeekOperator, INT SortOrder, VARIANT* pvarValue)

列に対する並べ替えおよび絞り込みの制限を設定します。

ColumnIndexCERT_VIEW_COLUMN_INDEXin

ビューの有効な列インデックス番号、または定義済みの列指定子。ColumnIndex パラメーターが負でない場合、この値は制限を適用する列の 0 から始まるインデックスを表します。

ColumnIndex パラメーターが負の場合、他のすべてのパラメーターは無視され、このパラメーターには次のいずれかの値を指定する必要があります。

意味
CV_COLUMN_QUEUE_DEFAULT
-1
ビューを未解決の要求に制限します。要求が発行済み証明書または失敗した要求のいずれかになった場合、その要求はビューに含まれません。
CV_COLUMN_LOG_DEFAULT
-2
ビューを解決済みの要求に制限します。要求は、発行された証明書または失敗した要求のいずれかになった時点で解決済みとみなされます。失効した証明書は解決済みとみなされます。
CV_COLUMN_LOG_FAILED_DEFAULT
-3
ビューを失敗した要求に制限します。
SeekOperatorCERT_VIEW_SEEK_OPERATOR_FLAGSin

列に対するデータクエリ修飾子の論理演算子を指定します。このパラメーターは pvarValue パラメーターと共に使用され、データクエリ修飾子を定義します。

このパラメーターには、次のいずれかの値を設定する必要があります。

意味
CVR_SEEK_EQ
0x1
等しい
CVR_SEEK_LT
0x2
より小さい
CVR_SEEK_LE
0x4
以下
CVR_SEEK_GE
0x8
以上
CVR_SEEK_GT
0x10
より大きい
SortOrderINTin

列の並べ替え順序を指定します。制限が 0 個または 1 個のインデックス付き列では、CVR_SORT_ASCEND または CVR_SORT_DESCEND の並べ替え順序を含めることができます。インデックスのない列、または制限が 2 個以上ある列では、CVR_SORT_NONE を使用する必要があります。

意味
CVR_SORT_NONE
0
並べ替えなし
CVR_SORT_ASCEND
0x1
昇順
CVR_SORT_DESCEND
0x2
降順
pvarValueVARIANT*inこの列に適用されるデータクエリ修飾子を指定します。このパラメーターは SeekOperator パラメーターと共に、どのデータが Certificate Services ビューに返されるかを決定します。

戻り値

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

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

解説(Remarks)

ICertView オブジェクトは制限の配列を保持しており、各列に任意の数の制限を含めることができます。列の制限が設定された後、ICertView::OpenView メソッドを呼び出すと、各列の制限がデータベースクエリの一部として使用されてデータが取得されます。

SetRestriction メソッドを呼び出す前に、ICertView::OpenConnection メソッドを呼び出して Certificate Service サーバーとの接続を確立する必要があります。

    // This example restricts the data
    // to rows that have RequestIDs greater than five.
    // pCertView is a pointer to ICertView.
    HRESULT    hr;
    VARIANT    varRest;
    LONG       nIndex;
    BSTR       bstrCol = NULL;

    // Use one column in the result set.
    hr = pCertView->SetResultColumnCount(1);
    if (FAILED(hr))
    {
        printf("Failed SetResultColumnCount - %x\n", hr);
        goto error;
    }
    // Determine the column index for RequestID column.
    bstrCol = SysAllocString(TEXT("RequestID"));
    hr = pCertView->GetColumnIndex(FALSE, bstrCol, &nIndex);
    if (FAILED(hr))
    {
        printf("Failed GetColumnIndex - %x\n", hr);
        goto error;
    }
    // Place this column into the result set.
    pCertView->SetResultColumn(nIndex);
    // Set a restriction on this column.
    VariantInit(&varRest);
    varRest.vt = VT_I4;
    varRest.lVal = 5;
    // Restrict view to requests with ID greater than 5.
    hr = pCertView->SetRestriction(nIndex,
                                   CVR_SEEK_GT,
                                   CVR_SORT_NONE,
                                   &varRest);
    if (S_OK != hr)
        printf("Failed ICertView::SetRestriction - %x\n", hr);
    else
    {
        // Call OpenView, process rows, release resources, and so on.
        // ...
    }
error:
    // Done processing, clear resources.
    VariantClear(&varRest);
    if (NULL != bstrCol)
        SysFreeString(bstrCol);
vtbl 14 HRESULT OpenView(IEnumCERTVIEWROW** ppenum)

Certificate Services データベースへのビューを開き、IEnumCERTVIEWROW オブジェクトのインスタンスを生成します。

ppenumIEnumCERTVIEWROW**outIEnumCERTVIEWROW 型のポインターへのポインター。

戻り値

C++

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

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

VB

戻り値は IEnumCERTVIEWROW オブジェクトです。

解説(Remarks)

OpenView メソッドを呼び出す前に、まず OpenConnection メソッドを呼び出して Certificate Services サーバーとの接続を確立する必要があります。

この呼び出しによって返される IEnumCERTVIEWROW オブジェクトは、内部インデックスがシーケンスの先頭を指している行の列挙シーケンスを表します。シーケンス内の最初の行を参照するには、 IEnumCERTVIEWROW::Next メソッドを呼び出します。これにより内部インデックスが最初の行に移動します。

既定以外の列セットや行のサブセットを表示するには、OpenConnection を呼び出した後、OpenView を呼び出す前に、 SetResultColumnCountSetResultColumnSetRestriction を呼び出します。

// pCertView is previously instantiated pointer to ICertView.
IEnumCERTVIEWROW * pEnumRow = NULL;
HRESULT    hr;

hr = pCertView->OpenView(&pEnumRow);
if (S_OK != hr)
    printf("Failed ICertView::OpenView - %x\n", hr);
else
    // use pEnumRow as needed, to enumerate data rows
    // ...
// Done processing, free resources.
if (NULL != pEnumRow)
    pEnumRow->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_ICertView "{C3FAC344-1E84-11D1-9BD6-00C04FB683FA}"
#usecom global ICertView IID_ICertView "{}"
#comfunc global ICertView_OpenConnection        7 wstr
#comfunc global ICertView_EnumCertViewColumn    8 int,sptr
#comfunc global ICertView_GetColumnCount        9 int,var
#comfunc global ICertView_GetColumnIndex        10 int,wstr,var
#comfunc global ICertView_SetResultColumnCount  11 int
#comfunc global ICertView_SetResultColumn       12 int
#comfunc global ICertView_SetRestriction        13 int,int,int,var
#comfunc global ICertView_OpenView              14 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。