ICertView
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
適切に権限を付与されたクライアントが、Certificate Services データベースのカスタマイズされたビューまたは完全なビューを作成できるようにします。
メソッド 8
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
Certificate Services サーバーとの接続を確立します。
| strConfig | LPWSTR | in | Certificate 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();
データベーススキーマに対する列の列挙シーケンスのインスタンスを取得します。
| fResultColumn | CVRC_COLUMN | in | 対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。
| ||||||||||
| ppenum | IEnumCERTVIEWCOLUMN** | out | IEnumCERTVIEWCOLUMN 型のポインターへのポインター。ppenum パラメーターが NULL の場合、このメソッドは失敗します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、*ppenum に IEnumCERTVIEWCOLUMN 型のポインターが設定されます。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は IEnumCERTVIEWCOLUMN オブジェクトです。解説(Remarks)
IEnumCERTVIEWCOLUMN オブジェクトを使用して、ビューの列を列挙し、各列の情報を取得できます。
Certificate Services データベースのビュー内の列数を取得します。
| fResultColumn | CVRC_COLUMN | in | 対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。
| ||||||||||
| pcColumn | INT* | inout | ビュー内の列数を格納する変数へのポインター。pcColumn パラメーターが NULL の場合、この関数は失敗します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pcColumn パラメーターにビュー内の列数が設定されます。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値はビュー内の列数です。解説(Remarks)
このメソッドは、ビュー内の列数を判別するために使用します。返される数値は、fResultColumn が TRUE の場合は結果セットの列数を、fResultColumn が FALSE の場合はデータベーススキーマ全体の列数を表します。
列の 0 から始まるインデックスを取得します。
| fResultColumn | CVRC_COLUMN | in | 対象の列を指定します。このパラメーターには、次のいずれかの値を指定できます。
| ||||||||||
| strColumnName | LPWSTR | in | ビュー内の列のローカライズされていない名前を格納する文字列。 | ||||||||||
| pColumnIndex | INT* | inout | strColumnName パラメーターで指定された列のインデックスを格納する変数のアドレス。pColumnIndex が NULL の場合、このメソッドは失敗します。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は列の 0 から始まるインデックスです。解説(Remarks)
このメソッドは、strColumnName パラメーターで指定された列のインデックスを判別するために使用します。列のインデックスは 0 から始まります(最初の列はインデックス 0 です)。
Certificate Services データベースのカスタマイズされたビューの結果セットに対する最大列数を指定します。
| cResultColumn | INT | in | 結果セット内の最大列数を指定します。このパラメーターには正の数値を設定できます。また、Certificate Services データベースの行数を数えることだけが目的の場合は 0 を、あるいは次の定数のいずれかを設定できます。 |
戻り値
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.
// ...
}
Certificate Services データベースのカスタマイズされたビューの結果セットに対する列を指定します。
| ColumnIndex | INT | in | 結果セットに含める列の、0 から始まるインデックス。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
SetResultColumn メソッドを呼び出す前に、SetResultColumnCount メソッドを呼び出して、結果セットに含める列数を指定する必要があります。SetResultColumn メソッドの呼び出しは、次の条件下で失敗します。
- 列数が指定されていない。
- SetResultColumn が、SetResultColumnCount の呼び出しで指定された列数を超える回数呼び出された。
- SetResultColumnCount が定義済みの列セットを指定した。cResultColumnCount パラメーターが次のいずれかの値である場合、このメソッドは定義済みの列セットを指定します。
結果セットに必要な列ごとに 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.
}
列に対する並べ替えおよび絞り込みの制限を設定します。
| ColumnIndex | CERT_VIEW_COLUMN_INDEX | in | ビューの有効な列インデックス番号、または定義済みの列指定子。ColumnIndex パラメーターが負でない場合、この値は制限を適用する列の 0 から始まるインデックスを表します。 ColumnIndex パラメーターが負の場合、他のすべてのパラメーターは無視され、このパラメーターには次のいずれかの値を指定する必要があります。
| ||||||||||||
| SeekOperator | CERT_VIEW_SEEK_OPERATOR_FLAGS | in | 列に対するデータクエリ修飾子の論理演算子を指定します。このパラメーターは pvarValue パラメーターと共に使用され、データクエリ修飾子を定義します。 このパラメーターには、次のいずれかの値を設定する必要があります。
| ||||||||||||
| SortOrder | INT | in | 列の並べ替え順序を指定します。制限が 0 個または 1 個のインデックス付き列では、CVR_SORT_ASCEND または CVR_SORT_DESCEND の並べ替え順序を含めることができます。インデックスのない列、または制限が 2 個以上ある列では、CVR_SORT_NONE を使用する必要があります。
| ||||||||||||
| pvarValue | VARIANT* | 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);
Certificate Services データベースへのビューを開き、IEnumCERTVIEWROW オブジェクトのインスタンスを生成します。
| ppenum | IEnumCERTVIEWROW** | out | IEnumCERTVIEWROW 型のポインターへのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は IEnumCERTVIEWROW オブジェクトです。解説(Remarks)
OpenView メソッドを呼び出す前に、まず OpenConnection メソッドを呼び出して Certificate Services サーバーとの接続を確立する必要があります。
この呼び出しによって返される IEnumCERTVIEWROW オブジェクトは、内部インデックスがシーケンスの先頭を指している行の列挙シーケンスを表します。シーケンス内の最初の行を参照するには、 IEnumCERTVIEWROW::Next メソッドを呼び出します。これにより内部インデックスが最初の行に移動します。
既定以外の列セットや行のサブセットを表示するには、OpenConnection を呼び出した後、OpenView を呼び出す前に、 SetResultColumnCount、 SetResultColumn、 SetRestriction を呼び出します。
例
// 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 公式リファレンス: 英語 (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 不要)。#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,sptr #comfunc global ICertView_GetColumnIndex 10 int,wstr,sptr #comfunc global ICertView_SetResultColumnCount 11 int #comfunc global ICertView_SetResultColumn 12 int #comfunc global ICertView_SetRestriction 13 int,int,int,sptr #comfunc global ICertView_OpenView 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。