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

ICertServerExit

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

公式ドキュメント

サーバーエンジンによってエクスポートされ、終了モジュールから呼び出されます。

メソッド 12

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

vtbl 7 HRESULT SetContext(INT Context)

インターフェイスの現在のインスタンスが、Context によって参照される要求に対して動作するようにします。

ContextINTin構築中の要求および関連する証明書を指定します。

戻り値

VB

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

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

vtbl 8 HRESULT GetRequestProperty(LPWSTR strPropertyName, INT PropertyType, VARIANT* pvarPropertyValue)

要求から名前付きプロパティを返します。

strPropertyNameLPWSTRin

取得するプロパティを指定します。名前プロパティと呼ばれる、常に有効でこのメソッドを呼び出して取得できる、あらかじめ用意された証明書プロパティのセットがあります。 これらのプロパティについては、 Name Properties を参照してください。

証明書要求に対して有効なその他のプロパティには、要求プロパティが含まれます。

Note  The request's DistinguishedName and RawName properties are accessible by GetRequestProperty only if the certificate is requested by using a PKCS #10 certificate request or another supported request format that contains encoded subject name information. Note that KeyGen requests do not contain encoded subject name information.
 

次のプロパティは要求に固有であり、GetRequestProperty メソッドを使用してアクセスできます。

要求プロパティ 意味
Disposition
Signed long
現在の要求の処理状態(disposition)
DispositionMessage
String
処理状態に関する情報メッセージ
RawCACertificate
Binary
発行元の証明機関(CA)の証明書
RawRequest
Binary
生の要求バイト列
RequestAttributes
String
属性文字列(切り詰められる場合があります)
RequesterName
String
要求者の名前。形式は "DomainName\UserID"
RequestID
Signed long
内部の requestID
RequestType
Signed long
PKCS #10 要求か KeyGen 要求かを示します
ResolvedWhen
Date/time
解決された日時
StatusCode
Signed long
直前の操作の Windows エラー
SubmittedWhen
Date/time
到着した日時
 

RequestType プロパティは次のいずれかの値になります。

意味
CR_IN_PKCS7
PKCS #7 の更新または登録要求
CR_IN_PKCS10
PKCS #10 要求
CR_IN_KEYGEN
Keygen 要求(Netscape 形式)
 

さらに、特定の要求の種類、要求の拡張、または要求のヘッダーに設定された名前付き属性によって、他のプロパティが設定される場合があります。

PropertyTypeINTin

プロパティの種類を指定します。種類は次のいずれかになります。

意味
PROPTYPE_LONG
符号付き long データ
PROPTYPE_DATE
日付/時刻
PROPTYPE_BINARY
バイナリデータ
PROPTYPE_STRING
Unicode 文字列データ
pvarPropertyValueVARIANT*out要求プロパティの種類を格納する VARIANT へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pvarPropertyValue には要求プロパティの値を格納した VARIANT が設定されます。

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

VB

戻り値は要求プロパティの値です。

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

BSTR      bstrPropName = NULL;
VARIANT   varProp;

VariantInit( &varProp );

bstrPropName = SysAllocString(L"RequestID");

// Retrieve the request property.
// pCertServerExit has been used to call SetContext previously.
hr = pCertServerExit->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 );
vtbl 9 HRESULT GetRequestAttribute(LPWSTR strAttributeName, LPWSTR* pstrAttributeValue)

要求から名前付き属性の値を返します。

strAttributeNameLPWSTRin取得する属性の名前。
pstrAttributeValueLPWSTR*out属性の値を格納する BSTR 値へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pstrAttributeValue には属性の値を格納した BSTR が設定されます。

このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrAttributeValue として渡します。

BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。

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

VB

戻り値は属性の値を表す文字列です。

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

次の要求属性は KEYGEN スタイルの要求に固有です。

プロパティ名 種類 説明
Challenge String 要求に付随するチャレンジ文字列。
ExpectedChallenge String チャレンジ文字列が正しくない場合、サーバーはこの要求属性の値に期待されるチャレンジを設定し、失敗を診断できるようにします。
 

BSTR       bstrAttribValue = NULL;
HRESULT    hr;

// Get the request attribute.
// bstrAttribName is a BSTR assigned by EnumerateAttributes.
// Also, ICertServerExit::SetContext has already been
// called by pCertServerExit.
hr = pCertServerExit->GetRequestAttribute(bstrAttribName,
                                          &bstrAttribValue);

if (FAILED(hr))
{
    printf("Failed GetRequestAttribute [%x]\n", hr);
    goto error;
}
else
{

    // Successful call. Use bstrAttribValue as needed.
    // ...
}

// Done processing. Free BSTR.
if (NULL != bstrAttribValue)
    SysFreeString(bstrAttribValue);
vtbl 10 HRESULT GetCertificateProperty(LPWSTR strPropertyName, INT PropertyType, VARIANT* pvarPropertyValue)

証明書から名前付きプロパティを返します。(ICertServerExit.GetCertificateProperty)

strPropertyNameLPWSTRin

取得する名前付きプロパティを指定します。名前プロパティと呼ばれる、常に有効でこのメソッドを呼び出して取得できる、あらかじめ用意された証明書プロパティのセットがあります。 これらのプロパティについては、 Name Properties を参照してください。 取得できるその他のプロパティには、証明書プロパティが含まれます。

次のプロパティは証明書に固有であり、GetCertificateProperty で読み取ることができます。

意味
NotBefore
Date/Time
証明書の有効期間の開始日
NotAfter
Date/Time
証明書の有効期限
PublicKeyAlgorithm
String
サブジェクトキーのアルゴリズムのオブジェクト識別子(OID)
RawCertificate
Binary
生の証明書バイト列
RawPublicKey
Binary
サブジェクトキー
RawPublicKeyAlgorithmParameters
Binary
サブジェクトキーのアルゴリズムパラメーター
RequestID
Signed Long
内部の要求 ID
SerialNumber
String
証明書のシリアル番号
 

証明書の DistinguishedName、RawName、SerialNumber の各プロパティは、ポリシーモジュールが要求の処理を完了し、証明書が発行された後にのみ、GetCertificateProperty でアクセスできます。

次のプロパティは証明機関(CA)に適用されます。これらのプロパティを読み取るには、コンテキストが 0 である必要があります。コンテキストは、ICertServerExit オブジェクトが最初に作成されたときに 0 に設定されます。SetContext メソッドを呼び出して 0 に設定することもできます。

意味
CAType
Long
証明機関(CA)の種類。次のいずれかの値になります(Certsrv.h で定義):

ENUM_ENTERPRISE_ROOTCA

ENUM_ENTERPRISE_SUBCA

ENUM_STANDALONE_ROOTCA

ENUM_STANDALONE_SUBCA

CertCount
Long
CA 証明書の数。この値は、CA が更新された回数に 1 を加えた値になります。更新については、 Certification Authority Renewal を参照してください。
CertState
Long
CA 証明書の状態。次のいずれかの値になります:
CA_DISP_ERROR: CA 証明書は一度も発行されていません。
CA_DISP_REVOKED: CA 証明書は失効しています。
CA_DISP_VALID: CA 証明書はまだ有効です。
CA_DISP_INVALID: CA 証明書は有効期限が切れています。
このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。
CertSuffix
String
CA 証明書のサフィックス。インデックスが 0 の CA 証明書ではサフィックスは空文字列になります。それ以外の場合、サフィックス("(nn)" の形式。nn は証明書のインデックス)は、ファイルまたはディレクトリサービスオブジェクトに格納された CA 証明書を指すすべての URL に適用されます。LDAP 以外の URL では、サフィックスは通常 ".crt" テキストの前に現れます。LDAP URL では、サフィックスは通常、完全な識別名の最初の 'CN=' に付加されます。

このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。

CRLIndex
Long
証明書失効リスト(CRL)のインデックス。このプロパティ名に証明書のインデックスを付加すると、CRL インデックスを取得できます。CRL インデックスは、必ずしも証明書のインデックスと一致するとは限りません。詳細については、 Certification を参照してください。

このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。

CRLState
Long
CRL の状態。次のいずれかの値になります:
CA_DISP_ERROR: CRL は別の CA 証明書によって管理されています。
CA_DISP_REVOKED: この CA 証明書の CRL を使用する、有効期限が切れていないすべての CA 証明書が失効しています。
CA_DISP_VALID: CA 証明書は、必要に応じて CRL を発行するために引き続き使用されています。
CA_DISP_INVALID: この CA 証明書の CRL を使用するすべての CA 証明書の有効期限が切れています。
このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。
CRLSuffix
String
CA の CRL のサフィックス。インデックスが 0 の CRL ではサフィックスは空文字列になります。それ以外の場合、サフィックス("(nn)" の形式。nn は CRL インデックス)は、ファイルまたはディレクトリサービスオブジェクトに格納された CRL を指すすべての URL に適用されます。LDAP 以外の URL では、サフィックスは通常 ".crl" テキストの前に現れます。LDAP URL では、サフィックスは通常、完全な識別名の最初の 'CN=' に付加されます。

このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。

fUseDS
Long
CA がディレクトリサービスを使用するかどうかを示します。次のいずれかの値になります:
  • 0=いいえ
  • 1=はい
MachineDNSName
String
CA をホストするサーバーの DNS 名。
ModuleRegistryLocation
String
モジュールが使用できるレジストリの場所。
RawCACertificate
Binary
CA 証明書。

このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。

RawCRL
Binary
CA の証明書失効リスト(CRL)。

このプロパティ名には '.#' を付加できます。# は CA 証明書のインデックス(CRLSuffix プロパティの場合は CRL インデックス)を表します。証明書および CRL のインデックスについては、 Certification Authority Renewal を参照してください。

RequesterCAAccess
Long
要求者が証明書を要求する権限を持っているかどうかを示します。次のいずれかの値になります:
  • 0=いいえ
  • 1=はい
(証明機関 MMC スナップインを使用して、証明書要求のアクセス許可を制御できます。)
SanitizedCAName
String
CA のサニタイズ済み名。サニタイズ済み CA 名については、 ICertConfig::GetConfig を参照してください。
SanitizedShortName
String
CA のサニタイズ済み名。一意性を確保するために短縮され、ハッシュ値を含みます。
PropertyTypeINTin

プロパティの種類を指定します。種類は次のいずれかになります。

意味
PROPTYPE_LONG
符号付き long データ
PROPTYPE_DATE
日付/時刻
PROPTYPE_BINARY
バイナリデータ
PROPTYPE_STRING
Unicode 文字列データ
pvarPropertyValueVARIANT*outプロパティの値を格納する VARIANT へのポインター。返される値は BSTR としてエンコードされます。BSTR の長さを取得するには、SysStringByteLen 関数を使用します。バイナリ BLOB は、Distinguished Encoding Rules でエンコードされた X.509 証明書として格納されます。

戻り値

C++

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

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

VB

戻り値は要求したプロパティの値です。

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

BSTR    bstrPropName = NULL;
VARIANT varProp;

VariantInit(&varProp);

// Set the property name to RequestID.
bstrPropName = SysAllocString(L"RequestID");

// Retrieve the certificate property.
// pCertServerExit has been used to call SetContext previously.
hr = pCertServerExit->GetCertificateProperty(bstrPropName,
                                             PROPTYPE_LONG,
                                             &varProp );
if (FAILED(hr))
{
    printf("Failed GetCertificateProperty [%x]\n", hr);
    goto error;
}
else
{
    // Successfully retrieved property; use varProp as needed.
    // ...
}

// Done processing.
if (NULL != bstrPropName)
    SysFreeString(bstrPropName);
VariantClear(&varProp);
vtbl 11 HRESULT GetCertificateExtension(LPWSTR strExtensionName, INT Type, VARIANT* pvarValue)

指定した証明書の拡張を取得します。

strExtensionNameLPWSTRin拡張の名前を格納する文字列。
TypeINTin

拡張の種類を指定します。種類は次のいずれかになります。

意味
PROPTYPE_LONG
符号付き long データ
PROPTYPE_DATE
日付/時刻
PROPTYPE_BINARY
拡張の値はそのまま取得され、必要に応じて ASN.1 エンコードされます。
PROPTYPE_STRING
拡張の値は IA5 文字列として ASN.1 エンコードされます。
pvarValueVARIANT*out要求した拡張の値を受け取る VARIANT へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pvarValue には拡張の値を格納した VARIANT が設定されます。

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

VB

戻り値は要求した拡張の値です。

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

VARIANT  varExt;
HRESULT  hr;

VariantInit(&varExt);
// Get the Extension value
// bstrExtName is BSTR assigned by EnumerateExtensions.
// pCertServerExit has been used to call SetContext previously.
hr = pCertServerExit->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);
vtbl 12 HRESULT GetCertificateExtensionFlags(INT* pExtFlags)

直前の ICertServerExit::GetCertificateExtension の呼び出しで取得した拡張のフラグを取得します。

pExtFlagsINT*out拡張のフラグを格納する LONG 変数へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pExtFlags には、直前の ICertServerExit::GetCertificateExtension の呼び出しで取得した拡張のフラグを格納した変数が設定されます。

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

VB

戻り値は、直前の ICertServerExit::GetCertificateExtension の呼び出しで取得した拡張のフラグです。

解説(Remarks)

拡張で使用されるフラグには、ポリシーフラグとオリジンフラグの 2 種類があります。

フラグの種類 説明
ポリシー 証明書の拡張に関する情報を提供します。ポリシーフラグはポリシーモジュールによって設定できます。
オリジン 証明書の拡張を設定したモジュールを示します。オリジンフラグはサーバーエンジンによってのみ設定されます。
 

拡張からは 1 つ以上のポリシーフラグが返される場合があります。次に、あらかじめ定義されたポリシーフラグを示します。

ポリシーフラグの値 説明
EXTENSION_CRITICAL_FLAG これはクリティカルな拡張です。
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 ビットは、カスタムデータのために安全に使用できます。これらのビットはデータベースに永続的に保存されますが、証明書の拡張には書き込まれません。

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

HRESULT  hr;
LONG     ExtFlags;

// pCertServerExit has been used to call SetContext previously.
hr = pCertServerExit->GetCertificateExtensionFlags(&ExtFlags);

// More than one policy flag may be set.
LONG ExtPolicyFlags = ExtFlags & EXTENSION_POLICY_MASK;

if (ExtPolicyFlags & EXTENSION_CRITICAL_FLAG)
{
    // Perform the desired operation.
}

if (ExtPolicyFlags & EXTENSION_DISABLE_FLAG)
{
    // Perform the desired operation.
}

// 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;
    case EXTENSION_ORIGIN_RENEWALCERT:
        // Extension was set by renewal certificate.
        break;
    case EXTENSION_ORIGIN_IMPORTEDCERT:
        // Extension was set by imported certificate.
        break;
    case EXTENSION_ORIGIN_PKCS7:
        // Extension was set by PKCS #7.
        break;
    default:
        break;
}
vtbl 13 HRESULT EnumerateExtensionsSetup(INT Flags)

内部の列挙ポインターを、現在のコンテキストに関連付けられた最初の証明書の拡張に初期化します。(ICertServerExit.EnumerateExtensionsSetup)

FlagsINTinこのパラメーターは予約されており、0 に設定する必要があります。

戻り値

VB

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

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

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

// Set the context. The value nContext (long) would be the same
// as the context parameter in ICertExit::Notify.
// hr is defined as an HRESULT.
hr = pCertServerExit->SetContext( nContext );
if (FAILED(hr))
{
    printf("Failed SetContext [%x]\n", hr);
    goto error;
}

// Setup the enumeration.
hr = pCertServerExit->EnumerateExtensionsSetup( 0 );
if (FAILED(hr))
{
    printf("Failed EnumerateExtensionsSetup [%x]\n", hr);
    goto error;
}
vtbl 14 HRESULT EnumerateExtensions(LPWSTR* pstrExtensionName)

列挙される次の証明書の拡張のオブジェクト識別子(OID)文字列(拡張名とも呼ばれます)を返し、その後、内部ポインターを次の拡張に進めます。

pstrExtensionNameLPWSTR*out列挙された拡張名へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pstrExtensionName には列挙された拡張の名前を格納した BSTR が設定されます。最後の拡張が既に列挙されている場合は、S_FALSE が返されます。

このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrExtensionName として渡します。

BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。

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

VB

列挙された拡張の名前を格納した文字列を返します。最後の拡張が既に列挙されている場合は空文字列を返します。

解説(Remarks)

このメソッドは、データベースに記録された証明書の拡張を列挙します。これには、無効化されていて証明書には現れない拡張も含まれます。拡張が無効になっているかどうかを判断するには、 ICertServerExit::GetCertificateExtensionFlags を使用して、拡張の EXTENSION_DISABLE_FLAG ビットをテストします。

BSTR     bstrExt = NULL;
VARIANT  varExt;
LONG     ExtFlags;
HRESULT  hr;

VariantInit(&varExt);

// Enumerate the extensions.
while (S_OK ==
      (hr = pCertServerExit->EnumerateExtensions(&bstrExt)))
{
  // Retrieve the extension data.
  if (FAILED(pCertServerExit->GetCertificateExtension(
                              bstrExt,
                              PROPTYPE_BINARY,
                              &varExt)))
      printf("Failed GetCertificateExtension\n");
  else
  {
     // Retrieve the extension flags.
    if (FAILED(pCertServerExit->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);
vtbl 15 HRESULT EnumerateExtensionsClose()

拡張の列挙に関連付けられたすべてのリソースを解放します。

vtbl 16 HRESULT EnumerateAttributesSetup(INT Flags)

内部の列挙ポインターを、現在のコンテキストに関連付けられた最初の要求属性に初期化します。(ICertServerExit.EnumerateAttributesSetup)

FlagsINTinこのパラメーターは予約されており、0 に設定する必要があります。

戻り値

VB

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

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

解説(Remarks)

このメソッドを使用する前に、 ICertServerExit::SetContext を呼び出す必要があります。

// Set up the enumeration.
hr = pCertServerExit->EnumerateAttributesSetup(0);
if (FAILED(hr))
{
    printf("Failed EnumerateAttributesSetup [%x]\n", hr);
    goto error;
}
vtbl 17 HRESULT EnumerateAttributes(LPWSTR* pstrAttributeName)

現在のコンテキスト内の次の要求属性の名前を返し、その後、内部ポインターを次の属性に進めます。

pstrAttributeNameLPWSTR*out列挙された属性名へのポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pstrAttributeName には列挙された属性の名前を格納した BSTR が設定されます。最後の属性が既に列挙されている場合は、S_FALSE が返されます。

このメソッドを使用するには、BSTR 型の変数を作成し、その変数に NULL を設定して、その変数のアドレスを pstrAttributeName として渡します。

BSTR の使用を終えたら、SysFreeString 関数を呼び出して解放してください。

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

VB

列挙された属性の名前を格納した文字列を返します。最後の属性が既に列挙されている場合は空文字列を返します。
vtbl 18 HRESULT EnumerateAttributesClose()

属性の列挙に関連付けられたすべてのリソースを解放します。

戻り値

VB

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

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ICertServerExit "{4BA9EB90-732C-11D0-8816-00A0C903B83C}"
#usecom global ICertServerExit IID_ICertServerExit "{}"
#comfunc global ICertServerExit_SetContext                    7 int
#comfunc global ICertServerExit_GetRequestProperty            8 wstr,int,var
#comfunc global ICertServerExit_GetRequestAttribute           9 wstr,var
#comfunc global ICertServerExit_GetCertificateProperty        10 wstr,int,var
#comfunc global ICertServerExit_GetCertificateExtension       11 wstr,int,var
#comfunc global ICertServerExit_GetCertificateExtensionFlags  12 var
#comfunc global ICertServerExit_EnumerateExtensionsSetup      13 int
#comfunc global ICertServerExit_EnumerateExtensions           14 var
#comfunc global ICertServerExit_EnumerateExtensionsClose      15
#comfunc global ICertServerExit_EnumerateAttributesSetup      16 int
#comfunc global ICertServerExit_EnumerateAttributes           17 var
#comfunc global ICertServerExit_EnumerateAttributesClose      18
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。