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

ICEnroll3

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

公式ドキュメント

証明書登録(エンロール)コントロールを表す複数のインターフェイスのうちの1つです。

メソッド 14

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

vtbl 69 HRESULT InstallPKCS7(LPWSTR PKCS7)

証明書または証明書チェーンを処理し、適切な証明書ストアに格納します。このメソッドは、要求証明書を受け取らない点で acceptPKCS7 メソッドと異なります。

PKCS7LPWSTRin証明書または証明書チェーンを含む文字列。

戻り値

VB

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

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

解説(Remarks)

このメソッドがスクリプトから呼び出されると、証明書のインストールを許可するかどうかをユーザーに尋ねるユーザーインターフェイスが表示されます。

vtbl 70 HRESULT Reset()

証明書登録コントロールオブジェクトを初期状態に戻し、コントロールを再利用できるようにします。このメソッドは ICEnroll3 インターフェイスで初めて定義されました。

戻り値

VB

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

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

vtbl 71 HRESULT GetSupportedKeySpec(INT* pdwKeySpec)

署名操作および交換操作に対する現在の暗号化サービスプロバイダー(CSP)のサポート状況に関する情報を取得します。このメソッドは ICEnroll3 インターフェイスで初めて定義されました。

pdwKeySpecINT*out現在の CSP が 交換キーおよび 署名キーをサポートしているかどうかを示すビットフラグを受け取る LONG へのポインター。

戻り値

C++

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

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

VB

現在の CSP が交換キーおよび署名キーをサポートしているかどうかを示す値を返します。CSP がこのメソッドをサポートしていない場合は、エラーが返されます。

解説(Remarks)

現在の CSP が交換キー、署名キー、またはその両方をサポートしているかどうかを判断するには、このメソッドを呼び出します。pdwKeySpec パラメーターには、次の定数(Wincrypt.h で定義)のうち1つ以上が格納されます。

DWORD dwKeySpec;

// Determine the supported key specifications.
// hr is HRESULT variable.
hr = pEnroll->GetSupportedKeySpec( &dwKeySpec );
if ( FAILED( hr ) )    
    printf("Failed GetSupportedKeySpec [%x]\n", hr);
else
{
    printf("Exchange keys are %s. Signature keys are %s.\n",
           dwKeySpec & AT_KEYEXCHANGE ? "supported" : "not supported",
           dwKeySpec & AT_SIGNATURE ? "supported" : "not supported" );
}
vtbl 72 HRESULT GetKeyLen(BOOL fMin, BOOL fExchange, INT* pdwKeySize)

署名キーおよび交換キーの最小キー長と最大キー長を取得します。

fMinBOOLinどちらのキー長(最小または最大)を取得するかを示すブール値。fMinTRUE の場合は最小キー長を取得し、FALSE の場合は最大キー長を取得します。
fExchangeBOOLinキーの種類を示すブール値。fExchangeTRUE の場合は交換キーのキー長を取得し、FALSE の場合は署名キーのキー長を取得します。
pdwKeySizeINT*outキーの最小長または最大長(ビット単位)を受け取るポインター。

戻り値

C++

メソッドが成功した場合、S_OK を返し、*pdwKeySize にはキーの最小長または最大長を表す値(ビット単位)が格納されます。

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

VB

キーの最小長または最大長を表す値(ビット単位)。

解説(Remarks)

最小キー長と最大キー長を判断するには、このメソッドを呼び出します。CSP がこのメソッドをサポートしていない場合は、エラーが返されます。

DWORD dwExchMin, dwExchMax, dwSignMin, dwSignMax;

// Determine the minimum and maximum key length values.
// hr is HRESULT variable.
hr = pEnroll->GetKeyLen( TRUE, TRUE, &dwExchMin );
if ( FAILED( hr ) )    
    printf("Failed GetKeyLen for Exchange Minimum [%x]\n", hr);
else
    printf("Exchange key Min: %d\n", dwExchMin);

hr = pEnroll->GetKeyLen( FALSE, TRUE, &dwExchMax );
if ( FAILED( hr ) )
    printf("Failed GetKeyLen for Exchange Maximum [%x]\n", hr);
else
    printf("Exchange key Max: %d\n", dwExchMax );

hr = pEnroll->GetKeyLen( TRUE, FALSE, &dwSignMin );
if ( FAILED( hr ) )
    printf("Failed GetKeyLen for Signature Minimum [%x]\n", hr);
else
    printf("Signature key Min: %d\n", dwSignMin );

hr = pEnroll->GetKeyLen( FALSE, FALSE, &dwSignMax );
if ( FAILED( hr ) )    
    printf("Failed GetKeyLen for Signature Maximum [%x]\n", hr);
else
    printf("Signature key Max: %d\n", dwSignMax );
vtbl 73 HRESULT EnumAlgs(INT dwIndex, INT algClass, INT* pdwAlgID)

ICEnroll4::EnumAlgs メソッドは、指定されたアルゴリズムクラスに属し、現在の暗号化サービスプロバイダー(CSP)でサポートされている暗号化アルゴリズムの ID を取得します。

dwIndexINTinID を取得するアルゴリズムの序数位置を指定します。最初のアルゴリズムを指定するには 0 を指定します。
algClassINTin

暗号化アルゴリズムのクラス。このメソッドが返す ID は、指定したクラスに属します。次のいずれかを指定します。

pdwAlgIDINT*out現在の CSP でサポートされている暗号化アルゴリズム ID を受け取る変数へのポインター。

戻り値

C++

戻り値は HRESULT です。S_OK は成功を示します。列挙するアルゴリズムがこれ以上ない場合は、値 ERROR_NO_MORE_ITEMS が返されます。

VB

現在の CSP でサポートされている暗号化アルゴリズム ID。列挙するアルゴリズムがこれ以上ない場合は、値 ERROR_NO_MORE_ITEMS が返されます。

解説(Remarks)

このメソッドで使用されるアルゴリズム ID およびクラスの定数については、Wincrypt.h を参照してください。

#include <windows.h>
#include <stdio.h>
#include <Xenroll.h>

DWORD     dwAlgID;
DWORD     dwIndex;

BSTR      bstrAlgName = NULL;

HRESULT   hr, hr2;

// Loop through the AlgIDs.
dwIndex = 0;
while ( TRUE )
{
    // Enumerate the alg IDs for a specific class.
    hr = pEnroll->EnumAlgs(dwIndex, ALG_CLASS_SIGNATURE, &dwAlgID);
    if ( S_OK != hr )
    {
       break;
    }

    // Do something with the AlgID.
    // For example, retrieve the corresponding name.
    hr2 = pEnroll->GetAlgName( dwAlgID, &bstrAlgName);
    if ( FAILED( hr2 ) )    
        printf("Failed GetAlgName [%x]\n", hr);
    else
        printf("AlgID: %d Name: %S\n", dwAlgID, bstrAlgName );

    // Reuse the BSTR variable in next iteration.
    if ( NULL != bstrAlgName )
    {
        SysFreeString( bstrAlgName );
        bstrAlgName = NULL;
    }

    // Increment the index.
    dwIndex++;
}

vtbl 74 HRESULT GetAlgName(INT algID, LPWSTR* pbstr)

指定された ID から暗号化アルゴリズムの名前を取得します。このメソッドで取得される値は、現在の暗号化サービスプロバイダー(CSP)に依存します。このメソッドは ICEnroll3 インターフェイスで初めて定義されました。

algIDINTinWincrypt.h で定義されている、暗号化アルゴリズムを表す値。たとえば、CALG_MD2 は定義済みのアルゴリズム識別子です。このメソッドが成功するには、現在の CSP が algID のアルゴリズムをサポートしている必要があります。
pbstrLPWSTR*out成功した場合、algID で指定されたアルゴリズムの名前を表す BSTR へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

戻り値

C++

戻り値は HRESULT です。S_OK は成功を示します。CSP がこのメソッドをサポートしていない場合、または algID の暗号化アルゴリズムをサポートしていない場合は、エラーが返されます。

VB

戻り値は、algID で指定されたアルゴリズムの名前を表す文字列です。CSP がこのメソッドをサポートしていない場合は、エラーが返されます。

解説(Remarks)

このメソッドは、 EnumAlgs を呼び出して取得した ID を持つアルゴリズムの名前を表示するために使用できます。

暗号化アルゴリズムの定数は Wincrypt.h で定義されています。

BSTR      bstrAlgName = NULL;

HRESULT   hr;

// Retrieve the algorithm name.
// dwAlgID is a DWORD variable for an algorithm ID.
hr = pEnroll->GetAlgName( dwAlgID, &bstrAlgName);
if (FAILED(hr))
    printf("Failed GetAlgName [%x]\n", hr);
else
    printf("AlgID: %d Name: %S\n", dwAlgID, bstrAlgName );

// Free BSTR resource.
if ( NULL != bstrAlgName )
{
    SysFreeString( bstrAlgName );
    bstrAlgName = NULL;
}
vtbl 75 HRESULT put_ReuseHardwareKeyIfUnableToGenNew(BOOL fReuseHardwareKeyIfUnableToGenNew)

新しいキーの生成時にエラーが発生した場合に証明書登録コントロールオブジェクトが実行する動作を決定するブール値を設定または取得します。(Put)

fReuseHardwareKeyIfUnableToGenNewBOOLin新規キーを生成できない場合に既存のハードウェアキーを再利用するかどうかを指定する BOOL 値を渡す。

解説(Remarks)

このプロパティはブール値です。このプロパティは、NTE_TOKEN_KEYSET_STORAGE_FULL を返す 暗号化サービスプロバイダーにのみ影響します。これらの CSP は通常ハードウェアベースであり、スマートカードなどが例として挙げられます。このプロパティが true で、新しいキーの生成中にエラーが発生した場合、証明書登録コントロールオブジェクトは既存のハードウェアキーを再利用します。このプロパティが false で、新しいキーの生成中にエラーが発生した場合、証明書登録コントロールオブジェクトは既存のハードウェアキーを再利用せず、代わりに呼び出し元にエラーを渡します。

// Code to set the reuse H/W key status.
// hr is HRESULT variable.
hr = pEnroll->put_ReuseHardwareKeyIfUnableToGenNew( FALSE );
if ( FAILED( hr ) )    
    printf("Failed put_ReuseHardwareKeyIfUnableToGenNew [%x]\n", hr);


// Code to retrieve the reuse H/W key status.
BOOL bReuse;

hr = pEnroll->get_ReuseHardwareKeyIfUnableToGenNew( &bReuse );
if ( FAILED( hr ) )
    printf("Failed get_ReuseHardwareKeyIfUnableToGenNew [%x]\n", hr);
else
    printf("Hardware key %s be reused if unable"
        " to generate a new key.\n", bReuse ? "will" : "will not");
vtbl 76 HRESULT get_ReuseHardwareKeyIfUnableToGenNew(BOOL* fReuseHardwareKeyIfUnableToGenNew)

新しいキーの生成時にエラーが発生した場合に証明書登録コントロールオブジェクトが実行する動作を決定するブール値を設定または取得します。(Get)

fReuseHardwareKeyIfUnableToGenNewBOOL*out新規キーを生成できない場合に既存のハードウェアキーを再利用するかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

このプロパティはブール値です。このプロパティは、NTE_TOKEN_KEYSET_STORAGE_FULL を返す 暗号化サービスプロバイダーにのみ影響します。これらの CSP は通常ハードウェアベースであり、スマートカードなどが例として挙げられます。このプロパティが true で、新しいキーの生成中にエラーが発生した場合、証明書登録コントロールオブジェクトは既存のハードウェアキーを再利用します。このプロパティが false で、新しいキーの生成中にエラーが発生した場合、証明書登録コントロールオブジェクトは既存のハードウェアキーを再利用せず、代わりに呼び出し元にエラーを渡します。

// Code to set the reuse H/W key status.
// hr is HRESULT variable.
hr = pEnroll->put_ReuseHardwareKeyIfUnableToGenNew( FALSE );
if ( FAILED( hr ) )    
    printf("Failed put_ReuseHardwareKeyIfUnableToGenNew [%x]\n", hr);


// Code to retrieve the reuse H/W key status.
BOOL bReuse;

hr = pEnroll->get_ReuseHardwareKeyIfUnableToGenNew( &bReuse );
if ( FAILED( hr ) )
    printf("Failed get_ReuseHardwareKeyIfUnableToGenNew [%x]\n", hr);
else
    printf("Hardware key %s be reused if unable"
        " to generate a new key.\n", bReuse ? "will" : "will not");
vtbl 77 HRESULT put_HashAlgID(INT hashAlgID)

PKCS の署名時に使用するハッシュアルゴリズムを設定または取得します。(Put)

hashAlgIDINTin使用するハッシュアルゴリズムの ID を渡す。

解説(Remarks)

このプロパティの値は、 EnumAlgs メソッドが返すような ハッシュアルゴリズム ID です。HashAlgID プロパティと HashAlgorithm プロパティの両方が設定されている場合は、最後に更新された方が PKCS #10 要求の署名に使用されるハッシュアルゴリズムを決定します。

// Code to set the hash algorithm ID.
// hr is HRESULT variable.
hr = pEnroll->put_HashAlgID( CALG_MD4 );
if ( FAILED( hr ) )    
    printf("Failed put_HashAlgID [%x]\n", hr);


// Code to retrieve the hash algorithm ID.
DWORD dwHashID;

hr = pEnroll->get_HashAlgID( &dwHashID );
if ( FAILED( hr ) )    
    printf("Failed get_HashAlgID [%x]\n", hr);
else
    printf("HashAlgID: %d\n", dwHashID);
vtbl 78 HRESULT get_HashAlgID(INT* hashAlgID)

PKCS の署名時に使用するハッシュアルゴリズムを設定または取得します。(Get)

hashAlgIDINT*out現在のハッシュアルゴリズム ID を受け取る INT へのポインタである。

解説(Remarks)

このプロパティの値は、 EnumAlgs メソッドが返すような ハッシュアルゴリズム ID です。HashAlgID プロパティと HashAlgorithm プロパティの両方が設定されている場合は、最後に更新された方が PKCS #10 要求の署名に使用されるハッシュアルゴリズムを決定します。

// Code to set the hash algorithm ID.
// hr is HRESULT variable.
hr = pEnroll->put_HashAlgID( CALG_MD4 );
if ( FAILED( hr ) )    
    printf("Failed put_HashAlgID [%x]\n", hr);


// Code to retrieve the hash algorithm ID.
DWORD dwHashID;

hr = pEnroll->get_HashAlgID( &dwHashID );
if ( FAILED( hr ) )    
    printf("Failed get_HashAlgID [%x]\n", hr);
else
    printf("HashAlgID: %d\n", dwHashID);
vtbl 79 HRESULT put_LimitExchangeKeyToEncipherment(BOOL fLimitExchangeKeyToEncipherment)

AT_KEYEXCHANGE 要求にデジタル署名および否認防止のキー使用法が含まれるかどうかを決定するブール値を設定または取得します。(Put)

fLimitExchangeKeyToEnciphermentBOOLin鍵交換キーの用途を暗号化のみに制限するかどうかを指定する BOOL 値を渡す。

解説(Remarks)

このプロパティはブール値であり、AT_KEYEXCHANGE 要求にのみ影響します。AT_SIGNATURE 要求には影響しません。

このプロパティの値が false の場合、AT_KEYEXCHANGE 要求には次のキー使用法が含まれます。

このプロパティの値が true の場合、AT_KEYEXCHANGE 要求には次のキー使用法が含まれます。

// Get the LimitExchangeKeyToEncipherment value.
BOOL       bLimitKey;
HRESULT    hr;
// pEnroll is previously instantiated ICEnroll interface pointer.
hr = pEnroll->get_LimitExchangeKeyToEncipherment(&bLimitKey);
if (FAILED(hr))
    printf("Failed get_LimitExchangeKeyToEncipherment - %x\n", hr );
else
    printf("LimitExchangeKeyToEncipherment: %s\n",
          ( bLimitKey ? "TRUE" : "FALSE"));

// Set the LimitExchangeKeyToEncipherment value.
hr = pEnroll->put_LimitExchangeKeyToEncipherment( TRUE );
if ( FAILED ( hr ) )
    printf("Failed put_LimitExchangeKeyToEncipherment - %x\n", hr );
else
    printf( "LimitExchangeKeyToEncipherment was set to TRUE\n" );
vtbl 80 HRESULT get_LimitExchangeKeyToEncipherment(BOOL* fLimitExchangeKeyToEncipherment)

AT_KEYEXCHANGE 要求にデジタル署名および否認防止のキー使用法が含まれるかどうかを決定するブール値を設定または取得します。(Get)

fLimitExchangeKeyToEnciphermentBOOL*out鍵交換キーの用途を暗号化のみに制限するかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

このプロパティはブール値であり、AT_KEYEXCHANGE 要求にのみ影響します。AT_SIGNATURE 要求には影響しません。

このプロパティの値が false の場合、AT_KEYEXCHANGE 要求には次のキー使用法が含まれます。

このプロパティの値が true の場合、AT_KEYEXCHANGE 要求には次のキー使用法が含まれます。

// Get the LimitExchangeKeyToEncipherment value.
BOOL       bLimitKey;
HRESULT    hr;
// pEnroll is previously instantiated ICEnroll interface pointer.
hr = pEnroll->get_LimitExchangeKeyToEncipherment(&bLimitKey);
if (FAILED(hr))
    printf("Failed get_LimitExchangeKeyToEncipherment - %x\n", hr );
else
    printf("LimitExchangeKeyToEncipherment: %s\n",
          ( bLimitKey ? "TRUE" : "FALSE"));

// Set the LimitExchangeKeyToEncipherment value.
hr = pEnroll->put_LimitExchangeKeyToEncipherment( TRUE );
if ( FAILED ( hr ) )
    printf("Failed put_LimitExchangeKeyToEncipherment - %x\n", hr );
else
    printf( "LimitExchangeKeyToEncipherment was set to TRUE\n" );
vtbl 81 HRESULT put_EnableSMIMECapabilities(BOOL fEnableSMIMECapabilities)

ICEnroll4::EnableSMIMECapabilities プロパティは、PKCS を有効にするかどうかを制御します。(Put)

fEnableSMIMECapabilitiesBOOLinS/MIME 機能属性を要求に含めるかどうかを指定する BOOL 値を渡す。
vtbl 82 HRESULT get_EnableSMIMECapabilities(BOOL* fEnableSMIMECapabilities)

ICEnroll4::EnableSMIMECapabilities プロパティは、PKCS を有効にするかどうかを制御します。(Get)

fEnableSMIMECapabilitiesBOOL*outS/MIME 機能属性を要求に含めるかどうかを受け取る BOOL へのポインタである。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ICEnroll3 "{C28C2D95-B7DE-11D2-A421-00C04F79FE8E}"
#usecom global ICEnroll3 IID_ICEnroll3 "{43F8F289-7A20-11D0-8F06-00C04FC295E1}"
#comfunc global ICEnroll3_InstallPKCS7                          69 wstr
#comfunc global ICEnroll3_Reset                                 70
#comfunc global ICEnroll3_GetSupportedKeySpec                   71 var
#comfunc global ICEnroll3_GetKeyLen                             72 int,int,var
#comfunc global ICEnroll3_EnumAlgs                              73 int,int,var
#comfunc global ICEnroll3_GetAlgName                            74 int,var
#comfunc global ICEnroll3_put_ReuseHardwareKeyIfUnableToGenNew  75 int
#comfunc global ICEnroll3_get_ReuseHardwareKeyIfUnableToGenNew  76 var
#comfunc global ICEnroll3_put_HashAlgID                         77 int
#comfunc global ICEnroll3_get_HashAlgID                         78 var
#comfunc global ICEnroll3_put_LimitExchangeKeyToEncipherment    79 int
#comfunc global ICEnroll3_get_LimitExchangeKeyToEncipherment    80 var
#comfunc global ICEnroll3_put_EnableSMIMECapabilities           81 int
#comfunc global ICEnroll3_get_EnableSMIMECapabilities           82 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。