ICertServerPolicy
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ポリシーモジュールが証明書サービス(Certificate Services)と通信できるようにします。
メソッド 14
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
証明書サービスへの後続の呼び出しでコンテキストとして使用する要求を指定します。
| Context | INT | in | 要求を指定します。このパラメーターには、ICertPolicy::VerifyRequest メソッドの Context パラメーターで返された値と同一の値を設定する必要があります。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
インターフェイスが有効な要求を参照できるように、ポリシーモジュールは他のいずれの ICertServerPolicy メソッドを呼び出すよりも前に、まず SetContext メソッドを呼び出す必要があります。
例
// Set the context. The value nContext (long) would be the same
// as the context parameter in ICertPolicy::VerifyRequest.
// hr is defined as an HRESULT.
hr = pCertServerPolicy->SetContext( nContext );
if (FAILED(hr))
{
printf("Failed SetContext [%x]\n", hr);
goto error;
}
要求から特定のプロパティを取得します。
| strPropertyName | LPWSTR | in | 取得するプロパティの名前を指定します。このパラメーターには、名前プロパティ(name property)または要求プロパティ(request property)を設定できます。 名前プロパティには、常に有効で、このメソッドを呼び出すことで取得できる標準的な証明書プロパティのセットが含まれます。 これらのプロパティについては、Name Properties を参照してください。 要求プロパティは要求に固有であり、次の値を取ることができます。 Note ポリシーモジュールが要求の処理を完了するまで設定されないため、GetRequestProperty ではアクセスできない要求プロパティが他にもあります。さらに、特定の要求の種類、要求の拡張、または要求のヘッダーに設定された名前付き属性によって、他のプロパティが設定される場合があります。 | ||||||||||
| PropertyType | INT | in | プロパティの種類を指定します。PropertyType パラメーターには、次のいずれかの種類を指定できます。
| ||||||||||
| pvarPropertyValue | VARIANT* | out | 要求プロパティの種類を格納する VARIANT へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pvarPropertyValue パラメーターに要求プロパティが格納されます。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は要求プロパティです。解説(Remarks)
このメソッドを呼び出す前に SetContext メソッドを呼び出す必要があります。SetContext の呼び出しによって、現在のコンテキストとして使用する要求が指定されます。
要求は、証明書の一部ではない、要求および最終的に発行される証明書に関連するすべての状態を保持します。そのため、失効日時や処理結果(disposition)などのデータは、要求データオブジェクトに保持されます。
RequestType プロパティには、次のいずれかの値を設定できます。
| 値 | 意味 |
|---|---|
| CR_IN_PKCS | 要求が PKCS #7 の更新要求または登録要求であることを示します。 |
| CR_IN-PKCS10 | 要求が PKCS #10 要求であることを示します。 |
| CR_IN_KEYGEN | 要求が Keygen 要求(Netscape 形式)であることを示します。 |
例
BSTR bstrPropName = NULL;
VARIANT varProp;
VariantInit( &varProp );
bstrPropName = SysAllocString(L"RequestID");
// Retrieve the request property.
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->GetRequestProperty( bstrPropName,
PROPTYPE_LONG,
&varProp );
if (FAILED(hr))
{
printf("Failed GetRequestProperty [%x]\n", hr);
goto error;
}
else
{
// Successfully retrieved property; use varProp as needed.
// ...
}
// Done processing.
VariantClear( &varProp );
if ( NULL != bstrPropName )
SysFreeString( bstrPropName );
要求から名前付き属性を返します。
| strAttributeName | LPWSTR | in | 取得する属性の名前。 |
| pstrAttributeValue | LPWSTR* | out | 属性値を格納する BSTR 値へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、*pstrAttributeValue に属性値を格納する BSTR が設定されます。このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrAttributeValue として渡します。
BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。
メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は属性値を表す文字列です。解説(Remarks)
このメソッドを使用する前に ICertServerPolicy::SetContext を呼び出す必要があります。
次の要求属性は KEYGEN スタイルの要求に固有です。
| プロパティ名 | 種類 | 説明 |
|---|---|---|
| Challenge | String | 要求に付随するチャレンジ文字列。 |
| ExpectedChallenge | String | チャレンジ文字列が正しくない場合、失敗を診断できるように、サーバーはこの要求属性の値を、期待されるチャレンジに設定します。 |
例
BSTR bstrAttribValue = NULL;
HRESULT hr;
// Get the request attribute.
// bstrAttribName is BSTR assigned by EnumerateAttributes.
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->GetRequestAttribute(bstrAttribName,
&bstrAttribValue);
if (FAILED(hr))
{
printf("Failed GetRequestAttribute [%x]\n", hr);
goto error;
}
else
{
// Successful call. Use the bstrAttribValue as needed.
// ...
}
// Done processing. Free BSTR.
if (NULL != bstrAttribValue)
SysFreeString(bstrAttribValue);
証明書から名前付きプロパティを返します。(ICertServerPolicy.GetCertificateProperty)
| strPropertyName | LPWSTR | in | 取得する名前付きプロパティを指定します。名前プロパティ(name properties) と呼ばれる、常に有効で、このメソッドの呼び出しによって取得できる標準的な証明書プロパティのセットがあります。 これらのプロパティについては、Name Properties を参照してください。 名前プロパティ以外のプロパティも取得できます。 証明書の DistinguishedName プロパティおよび RawName プロパティは、ポリシーモジュールが要求の処理を完了し、証明書が発行された後にのみ、ICertServerExit::GetCertificateProperty でアクセスできます。発行された証明書の DistinguishedName プロパティおよび RawName プロパティは、ICertServerExit::GetCertificateProperty を使用して終了モジュール(exit module)から読み取ることもできます。 GetCertificateProperty ではアクセスできない証明書プロパティが他にもあります。これらのプロパティは、ポリシーモジュールが VR_INSTANT_OK を返して証明書が発行されるまで設定されません。発行された証明書に含まれるすべてのプロパティの完全な一覧については、GetCertificateProperty を参照してください。 次のプロパティは証明書に固有であり、GetCertificateProperty で読み取ることができます。
次のプロパティは 証明機関(CA) に適用されます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||
| PropertyType | CERT_PROPERTY_TYPE | in | プロパティの種類を指定します。種類は次のいずれかの値になります。
| ||||||||||||||||||||||||||||||||||||||||||||||||||
| pvarPropertyValue | VARIANT* | out | プロパティ値を格納する VARIANT へのポインター。 |
戻り値
メソッドが成功した場合、S_OK を返し、*pvarPropertyValue に要求されたプロパティ値を格納する VARIANT が設定されます。
メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
証明書に関連付けられたプロパティを設定します。
| strPropertyName | LPWSTR | in | 設定するプロパティを指定します。証明書に関連付けられた Name Properties のいずれも設定できます。 さらに、次の証明書プロパティを設定できます。
| ||||||||||||||||
| PropertyType | INT | in | 設定するプロパティの種類を指定します。Type パラメーターは、VARIANT 構造体の vt フィールドに設定される pvarValue のデータ型と一致している必要があります。Type パラメーターには、次のいずれかの種類を設定できます。
| ||||||||||||||||
| pvarPropertyValue | VARIANT* | in | プロパティに設定する値を指定します。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
このメソッドを使用する前に ICertServerPolicy::SetContext を呼び出す必要があります。
NotBefore および NotAfter の証明書プロパティは、証明書が有効である期間を制約します。これらのプロパティのデータ型は、オートメーションの COleDateTime から派生した浮動小数点の VARIANT 日付です。
SetCertificateProperty で NotBefore および NotAfter の証明書プロパティを設定する場合、次の制約が適用されます:
- NotBefore の日付は、証明機関(CA)証明書の NotBefore の日付より前の日付に設定することはできません。
- NotAfter の日付は、CA 証明書の NotAfter の日付より後の日付に設定することはできません。
- NotBefore の日付は、たとえ新しい日付が CA 証明書の NotBefore の日付より後であっても、現在設定されている日付より前の日付に設定することはできません。
- NotAfter の日付は、たとえ新しい日付が CA 証明書の NotAfter の日付より前であっても、現在設定されている日付より後の日付に設定することはできません。
例
次の例では、SetCertificateProperty メソッドを呼び出して NotBefore 証明書プロパティを設定します。この例では、pServer が有効であり、ICertServerPolicy::SetContext メソッドが呼び出されていることを前提としています。
HRESULT hr;
ICertServerPolicy *pServer;
SYSTEMTIME st;
BSTR bstrPropName;
VARIANT vPropValue;
bstrPropName = SysAllocString(L"NotBefore");
if (NULL == bstrPropName)
{
printf("Unable to allocate memory.\n");
return E_OUTOFMEMORY;
}
// Set the 'NotBefore' property to Noon on Jan. 1, 2000.
memset( &st, 0, sizeof(SYSTEMTIME));
st.wYear = 2000;
st.wMonth = 1; // Jan.
st.wDay = 1; // 1st day of month.
st.wHour = 12; // Noon.
// Place the date into VARIANT required format.
VariantInit( &vPropValue );
vPropValue.vt = VT_DATE;
if ( !SystemTimeToVariantTime( &st, &vPropValue.date))
{
printf("Unable to convert time.\n");
SysFreeString(bstrPropName);
return E_FAIL
}
// Set the NotBefore property in the certificate:
hr = pServer->SetCertificateProperty(bstrPropName,
PROPTYPE_DATE,
&vPropValue);
SysFreeString(bstrPropName);
VariantClear(&vPropValue);
if (FAILED(hr))
{
printf("SetCertificateProperty failed [%x]\n", hr);
return hr;
}
特定の証明書拡張を取得します。
| strExtensionName | LPWSTR | in | 拡張の名前を含む文字列。 | ||||||||||
| Type | CERT_PROPERTY_TYPE | in | 拡張の種類を指定します。種類は次のいずれかの値になります。
| ||||||||||
| pvarValue | VARIANT* | out | 要求された拡張値を受け取る VARIANT へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pvarValue パラメーターに拡張値が格納されます。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は要求された拡張値です。解説(Remarks)
このメソッドを呼び出す前に SetContext メソッドを呼び出す必要があります。SetContext の呼び出しによって、現在のコンテキストとして使用する要求が指定されます。
証明書拡張は証明書プロパティとは区別されます。プロパティは要求に添付される汎用的なデータです。これらのプロパティの一部は証明書にエンコードされますが(例: BeginDate)、その他はキューやログ内で要求をマークするためだけに使用されます。無効化されていない拡張は証明書にエンコードされます。拡張は常に オブジェクト識別子 でマークされ、常に critical/noncritical フラグを持ちます。
例
VARIANT varExt;
HRESULT hr;
VariantInit(&varExt);
// Get the Extension value.
// bstrExtName is BSTR assigned by EnumerateExtensions.
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->GetCertificateExtension(bstrExtName,
PROPTYPE_BINARY,
&varExt);
if (FAILED(hr))
{
printf("Failed GetCertificateExtension [%x]\n", hr);
goto error;
}
// Successful call; use the value in varExt as needed.
// ...
// When done, clear the Variant
VariantClear(&varExt);
直近の GetCertificateExtension の呼び出しで取得した拡張に関連付けられたフラグを取得します。
| pExtFlags | INT* | out | 拡張フラグを格納する LONG 変数へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pExtFlags パラメーターに、直近の GetCertificateExtension の呼び出しで取得した拡張のフラグが格納されます。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、直近の GetCertificateExtension の呼び出しで取得した拡張のフラグです。解説(Remarks)
GetCertificateExtensionFlags を呼び出す前に、SetContext メソッドと GetCertificateExtension メソッドを呼び出す必要があります。SetContext メソッドは現在のコンテキストとして使用する要求を指定し、GetCertificateExtension メソッドはその要求の拡張を取得します。
拡張には、ポリシーフラグと生成元(origin)フラグを含めることができます。ポリシーフラグは証明書拡張に関する情報を提供します。ポリシーフラグはポリシーモジュールが設定できます。生成元フラグは、証明書拡張を設定したモジュールを示します。生成元フラグはサーバーエンジンによってのみ設定されます。
拡張からは 1 つ以上のポリシーフラグが返される場合があります。次に、あらかじめ定義されているポリシーフラグを示します。
| ポリシーフラグの値 | 説明 |
|---|---|
| EXTENSION_CRITICAL_FLAG | これは critical(必須)拡張です。 |
| EXTENSION_DISABLE_FLAG | 拡張は使用されません。 |
また、次のいずれかの生成元フラグが返される場合があります。
| 生成元フラグの値 | 説明 |
|---|---|
| EXTENSION_ORIGIN_REQUEST | 拡張は、PKCS #10 要求の szOID_CERT_EXTENSIONS(1.3.6.1.4.1.311.2.1.14)属性または szOID_RSA_certExtensions(1.2.840.113549.1.9.14)属性に格納された拡張の配列から抽出されました。 |
| EXTENSION_ORIGIN_POLICY | ポリシーモジュールが拡張を設定しました。 |
| EXTENSION_ORIGIN_ADMIN | 管理者が拡張を設定しました。詳細については、ICertAdmin::SetCertificateExtension を参照してください。 |
| EXTENSION_ORIGIN_SERVER | サーバーエンジンが拡張を設定しました。 |
| EXTENSION_ORIGIN_RENEWALCERT | 拡張は、PKCS #10 更新要求の szOID_RENEWAL_CERTIFICATE(1.3.6.1.4.1.311.13.1)属性に格納された証明書から抽出されました。 |
| EXTENSION_ORIGIN_IMPORTEDCERT | 拡張は、インポートされた証明書(ICertAdmin::ImportCertificate に渡された証明書)から抽出されました。 |
| EXTENSION_ORIGIN_PKCS7 | 拡張は、PKCS #7 要求の szOID_CERT_EXTENSIONS(1.3.6.1.4.1.311.2.1.14)属性または szOID_RSA_certExtensions(1.2.840.113549.1.9.14)属性に格納された拡張の配列から抽出されました。 |
戻り値でどのフラグが設定されているかを判定しやすいように、あらかじめ定義されたマスクが用意されています。次のマスクが提供されます。
| マスクの値 | 説明 |
|---|---|
| EXTENSION_POLICY_MASK | この値(0x0000FFFF)は、ポリシーフラグを調べるために使用します。 |
| EXTENSION_ORIGIN_MASK | この値(0x000F0000)は、生成元フラグを調べるために使用します。 |
EXTENSION_POLICY_MASK の上位 8 ビットは、カスタムデータのために使用しても安全です。これらのビットはデータベースに永続的に保存されますが、証明書拡張には書き込まれません。
例
HRESULT hr;
LONG ExtFlags;
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->GetCertificateExtensionFlags( &ExtFlags);
// More than one policy flag might be set.
LONG ExtPolicyFlags = ExtFlags & EXTENSION_POLICY_MASK;
if (ExtPolicyFlags & EXTENSION_CRITICAL_FLAG)
{
// Do something.
}
if (ExtPolicyFlags & EXTENSION_DISABLE_FLAG)
{
// Do something.
}
// only one origin flag can be set
switch (ExtFlags & EXTENSION_ORIGIN_MASK)
{
case EXTENSION_ORIGIN_REQUEST:
// Extension was set in certificate request.
break;
case EXTENSION_ORIGIN_POLICY:
// Extension was set by policy module.
break;
case EXTENSION_ORIGIN_ADMIN:
// Extension was set by administrator.
break;
case EXTENSION_ORIGIN_SERVER:
// Extension was set by server engine.
break;
default:
break;
}
証明書に新しい拡張を追加します。
| strExtensionName | LPWSTR | in | 設定する拡張の オブジェクト識別子(OID)を指定します。文字列の長さは、null 文字を除いて 31 文字以下でなければなりません。 | ||||||||||
| Type | INT | in | 設定する拡張の種類を指定します。Type パラメーターは、VARIANT 構造体の vt フィールドに設定される pvarValue のデータ型と一致している必要があります。Type パラメーターには、次のいずれかの種類を設定できます。
| ||||||||||
| ExtFlags | INT | in | 設定する拡張のフラグを指定します。フラグを設定しない場合は 0 を使用し、それ以外の場合は次のフラグ値のいずれかを使用します。これらのフラグは OR 演算子で結合できます。また、ポリシーのプライベート拡張フラグ(EXTENSION_POLICY_MASK フィールドの上位 8 ビット)と OR 演算子で結合することもできます。 Note ExtFlags に EXTENSION_DISABLE_FLAG を設定すると、拡張はサーバーログで無効化され、証明書には追加されません。
| ||||||||||
| pvarValue | VARIANT* | in | 拡張に関連付ける値を指定します。値の VARIANT 型は、次の表に示すように Type パラメーターと一致している必要があることに注意してください。
|
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
補足的なサブジェクト情報や用途情報など、追加情報を証明書に含めるには拡張を使用します。詳細については、Extension Handlers を参照してください。
SetCertificateExtension メソッドは、ICertPolicy2::VerifyRequest メソッドの実装内から呼び出します。SetCertificateExtension メソッドを呼び出す前に、ICertServerPolicy::SetContext メソッドを呼び出す必要があります。
内部の列挙ポインターを、現在のコンテキストに関連付けられた最初の証明書拡張に初期化します。(ICertServerPolicy.EnumerateExtensionsSetup)
| Flags | INT | in | このパラメーターは予約されており、0 に設定する必要があります。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
このメソッドを呼び出す前に SetContext メソッドを呼び出す必要があります。SetContext の呼び出しによって、どの要求が現在のコンテキストであるかが指定されます。
拡張を取得するには、EnumerateExtensions メソッドを呼び出します。EnumerateExtensions の呼び出しによって最初の拡張が取得され、次の拡張が存在する場合はインデックスがそれに移動します。
例
// Set the context. The value nContext (long) would be the same
// as the context parameter in ICertPolicy::VerifyRequest.
// hr is defined as an HRESULT.
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->SetContext( nContext );
if (FAILED(hr))
{
printf("Failed SetContext [%x]\n", hr);
goto error;
}
// Setup the enumeration.
hr = pCertServerPolicy->EnumerateExtensionsSetup( 0 );
if (FAILED(hr))
{
printf("Failed EnumerateExtensionsSetup [%x]\n", hr);
goto error;
}
現在の拡張のオブジェクト識別子(OID)を取得し、内部の列挙ポインターを次の拡張に移動します。
| pstrExtensionName | LPWSTR* | out | 現在の拡張の OID を格納する BSTR へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pstrExtensionName パラメーターに現在の拡張の OID が格納されます。最後の拡張が既に列挙されている場合は S_FALSE が返されます。このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrExtensionName として渡します。
BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。
メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
拡張の OID を含む文字列を返します。最後の拡張が既に列挙されている場合は空の文字列を返します。解説(Remarks)
このメソッドは、無効化されていて証明書に現れないものも含め、データベースに記録されている証明書拡張を列挙します。拡張が無効化されているかどうかを判定するには、GetCertificateExtensionFlags を使用して、その拡張の EXTENSION_DISABLE_FLAG ビットをテストします。
列挙が完了したら、EnumerateExtensionsClose メソッドを呼び出して、列挙の呼び出しで使用したリソースを解放します。
例
#include <windows.h>
#include <stdio.h>
#include <Certif.h>
BSTR bstrExt = NULL;
VARIANT varExt;
LONG ExtFlags;
HRESULT hr;
VariantInit(&varExt);
// Enumerate the extensions.
while (S_OK ==
(hr = pCertServerPol->EnumerateExtensions(&bstrExt)))
{
// Retrieve the extension data.
if (FAILED(pCertServerPol->GetCertificateExtension(
bstrExt,
PROPTYPE_BINARY,
&varExt)))
printf("Failed GetCertificateExtension\n");
else
{
// Retrieve the extension flags.
if (FAILED(pCertServerPol->GetCertificateExtensionFlags(
&ExtFlags)))
printf("Failed GetCertificateExtensionFlags\n");
else
// This sample will display the extension OID string,
// the extension flags (in hex) and
// the length of the BSTR binary ASN-encode extension.
printf("Extension: %ws\tFlags:%x\tLength:%u\n",
bstrExt,
ExtFlags,
SysStringByteLen(varExt.bstrVal));
}
}
// Determine if hr was S_FALSE, meaning the enumeration
// was completed, or some other error.
if (S_FALSE != hr)
printf("Failed EnumerateExtensions - %x\n", hr);
// Free BSTR resource.
if (NULL != bstrExt)
SysFreeString(bstrExt);
// Free VARIANT resource.
VariantClear(&varExt);
拡張の列挙に関連するリソースを解放します。
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
すべてのポリシーモジュールは、EnumerateExtensionsSetup および ICertServerPolicy::EnumerateExtensions メソッドを呼び出した後に、EnumerateExtensionsClose メソッドを呼び出す必要があります。
例
// Close the enumeration.
// hr is defined as an HRESULT.
hr = pCertServerPolicy->EnumerateExtensionsClose();
if (FAILED(hr))
{
printf("Failed EnumerateExtensionsClose [%x]\n", hr);
goto error;
}
内部の列挙ポインターを、現在のコンテキストに関連付けられた最初の要求属性に初期化します。(ICertServerPolicy.EnumerateAttributesSetup)
| Flags | INT | in | このパラメーターは予約されており、0 に設定する必要があります。 |
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
このメソッドを呼び出す前に SetContext メソッドを呼び出す必要があります。SetContext の呼び出しによって、現在のコンテキストとして使用する要求が指定されます。
属性を取得するには、EnumerateAttributes メソッドを呼び出します。EnumerateAttributes の呼び出しによって最初の属性が取得され、次の属性が存在する場合はインデックスがそれに移動します。
例
// Set the context. The value nContext (long) would be the same
// as the context parameter in ICertPolicy::VerifyRequest.
// hr is defined as an HRESULT.
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->SetContext(nContext);
if (FAILED(hr))
{
printf("Failed SetContext [%x]\n", hr);
goto error;
}
// Setup the enumeration.
hr = pCertServerPolicy->EnumerateAttributesSetup(0);
if (FAILED(hr))
{
printf("Failed EnumerateAttributesSetup [%x]\n", hr);
goto error;
}
現在の属性の名前を取得し、内部の列挙ポインターを次の属性に移動します。
| pstrAttributeName | LPWSTR* | out | 属性名へのポインター。 |
戻り値
C++
メソッドが成功した場合、S_OK を返し、pstrAttributeName パラメーターに属性の名前を格納する BSTR が設定されます。最後の属性が既に列挙されている場合は S_FALSE が返されます。このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrAttributeName として渡します。
BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。
メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
属性の名前を含む文字列を返します。最後の属性が既に列挙されている場合は空の文字列を返します。解説(Remarks)
EnumerateAttributes メソッドを初めて呼び出す前に、EnumerateAttributesSetup メソッドを呼び出して、列挙ポインターを最初の属性に初期化します。
列挙が完了したら、EnumerateAttributesClose メソッドを呼び出して、列挙の呼び出しで使用したリソースを解放します。
属性の列挙に関連するリソースを解放します。
戻り値
VB
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
すべてのポリシーモジュールは、EnumerateAttributesSetup および EnumerateAttributes メソッドを呼び出した後に、EnumerateAttributesClose メソッドを呼び出す必要があります。
例
// Close the enumeration.
// hr is defined as an HRESULT.
hr = pCertServerPolicy->EnumerateAttributesClose();
if (FAILED(hr))
{
printf("Failed EnumerateAttributesClose [%x]\n", hr);
goto error;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICertServerPolicy "{AA000922-FFBE-11CF-8800-00A0C903B83C}" #usecom global ICertServerPolicy IID_ICertServerPolicy "{}" #comfunc global ICertServerPolicy_SetContext 7 int #comfunc global ICertServerPolicy_GetRequestProperty 8 wstr,int,var #comfunc global ICertServerPolicy_GetRequestAttribute 9 wstr,var #comfunc global ICertServerPolicy_GetCertificateProperty 10 wstr,int,var #comfunc global ICertServerPolicy_SetCertificateProperty 11 wstr,int,var #comfunc global ICertServerPolicy_GetCertificateExtension 12 wstr,int,var #comfunc global ICertServerPolicy_GetCertificateExtensionFlags 13 var #comfunc global ICertServerPolicy_SetCertificateExtension 14 wstr,int,int,var #comfunc global ICertServerPolicy_EnumerateExtensionsSetup 15 int #comfunc global ICertServerPolicy_EnumerateExtensions 16 var #comfunc global ICertServerPolicy_EnumerateExtensionsClose 17 #comfunc global ICertServerPolicy_EnumerateAttributesSetup 18 int #comfunc global ICertServerPolicy_EnumerateAttributes 19 var #comfunc global ICertServerPolicy_EnumerateAttributesClose 20 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICertServerPolicy "{AA000922-FFBE-11CF-8800-00A0C903B83C}" #usecom global ICertServerPolicy IID_ICertServerPolicy "{}" #comfunc global ICertServerPolicy_SetContext 7 int #comfunc global ICertServerPolicy_GetRequestProperty 8 wstr,int,sptr #comfunc global ICertServerPolicy_GetRequestAttribute 9 wstr,sptr #comfunc global ICertServerPolicy_GetCertificateProperty 10 wstr,int,sptr #comfunc global ICertServerPolicy_SetCertificateProperty 11 wstr,int,sptr #comfunc global ICertServerPolicy_GetCertificateExtension 12 wstr,int,sptr #comfunc global ICertServerPolicy_GetCertificateExtensionFlags 13 sptr #comfunc global ICertServerPolicy_SetCertificateExtension 14 wstr,int,int,sptr #comfunc global ICertServerPolicy_EnumerateExtensionsSetup 15 int #comfunc global ICertServerPolicy_EnumerateExtensions 16 sptr #comfunc global ICertServerPolicy_EnumerateExtensionsClose 17 #comfunc global ICertServerPolicy_EnumerateAttributesSetup 18 int #comfunc global ICertServerPolicy_EnumerateAttributes 19 sptr #comfunc global ICertServerPolicy_EnumerateAttributesClose 20 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。