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

ICEnroll

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

公式ドキュメント

ICEnroll インターフェイスは、Certificate Enrollment Control を表す複数のインターフェイスの 1 つです。

メソッド 56

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

vtbl 7 HRESULT createFilePKCS10(LPWSTR DNName, LPWSTR Usage, LPWSTR wszPKCS10FileName)

base64 エンコードされた PKCS を作成します (ICEnroll.createFilePKCS10)。

DNNameLPWSTRin要求の対象となるエンティティの識別名 (DN)。DNNameX.500 の命名規則に従う必要があります (例: "CN=User, O=Microsoft")。2 文字のプレフィックスが存在しない場合は、代わりに オブジェクト識別子 (OID) を指定できます。
UsageLPWSTRin

生成される証明書の用途を記述する OID。たとえば、個人用または商用の Authenticode 証明書、あるいはクライアント認証などです。コンマで区切って複数の OID を指定することもできます。

OID は PKCS #10 要求にそのまま渡されます。コントロールは OID を検査しません。

wszPKCS10FileNameLPWSTRinbase64 エンコードされた PKCS #10 (BSTR 形式) を保存するファイルの名前。このファイルの内容は、処理のために 証明機関 に提出できます。

戻り値

VB

戻り値は HRESULT です。S_OK は成功を示します。

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

解説(Remarks)

既定では、Microsoft Base Cryptographic Provider が使用され、一意の署名キーが作成されます。

このメソッドがスクリプトから呼び出されると、証明書要求の作成をユーザーが許可するかどうか、およびファイルシステムへの書き込み操作をユーザーが許可するかどうかを尋ねるユーザーインターフェイスが表示されます。

BSTR bstrDN = NULL;
BSTR bstrOID = NULL;
BSTR bstrFileName = NULL;
ICEnroll4 * pEnroll = NULL;
HRESULT hr;

hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
if (FAILED(hr))
{
    printf("Failed CoInitializeEx - %x\n", hr);
    goto error;
}

hr = CoCreateInstance( __uuidof(CEnroll),
                       NULL,
                       CLSCTX_INPROC_SERVER,
                       __uuidof(ICEnroll4),
                       (void **)&pEnroll);
if (FAILED(hr))
{
    printf("Failed CoCreateInstance - pEnroll [%x]\n", hr);
    goto error;
}

// Generate the DN for the cert request.
bstrDN = SysAllocString( TEXT("CN=Your Name")   // common name
                         TEXT(",OU=Your Unit")  // org unit
                         TEXT(",O=Your Org")    // organization
                         TEXT(",L=Your City")   // locality
                         TEXT(",S=Your State")  // state
                         TEXT(",C=Your Country") );  // country/region
if (NULL == bstrDN)
{
    printf("Memory allocation failed for bstrDN.\n");
    goto error;
}

// Generate the OID. For example, "1.3.6.1.4.1.311.2.1.21"
bstrOID = SysAllocString(TEXT("<OIDHERE>"));
if (NULL == bstrOID)
{
    printf("Memory allocation failed for bstrOID.\n");
    goto error;
}

// Specify the file name, for example, "myPKCS10.req"
bstrFileName = SysAllocString(TEXT("<FILENAMEHERE>"));
if (NULL == bstrFileName)
{
    printf("Memory allocation failed for bstrFileName.\n");
    goto error;
}

// Create the PKCS10 (stored in a file).
hr = pEnroll->createFilePKCS10( bstrDN, bstrOID, bstrFileName );
if (FAILED(hr))
{
   printf("Failed createFilePKCS10 - %x\n", hr);
   goto error;
}
else
    printf("Successfully created file containing PKCS10\n");

error:
// Clean up resources and so on.

if ( bstrFileName )
    SysFreeString( bstrFileName );

if ( bstrDN )
    SysFreeString( bstrDN );

if ( bstrOID )
    SysFreeString( bstrOID );

if ( pEnroll )
       pEnroll->Release();

CoUninitialize();
vtbl 8 HRESULT acceptFilePKCS7(LPWSTR wszPKCS7FileName)

PKCS を含むファイルを受け入れて処理します。

wszPKCS7FileNameLPWSTRinPKCS #7 メッセージを含むファイルの名前を指定します。

戻り値

VB

戻り値は HRESULT です。S_OK は成功を示します。この関数が正常に完了すると、ファイル内の PKCS #7 メッセージが受け入れられます。

解説(Remarks)

既定では、証明書の保管に My、Ca、Root、Request の各システムストアが使用されます。ただし、このメソッドを呼び出す前に次のプロパティを割り当てることで、他のストアを指定できます:

acceptFilePKCS7 メソッドは、証明書をファイルから供給する点だけが acceptPKCS7 と異なります。

HRESULT  hr;
BSTR     bstrFileName;

// Allocate a BSTR referencing an existing file, 
// for example, "myPKCS7.fil".
bstrFileName = SysAllocString(TEXT("<FILENAMEHERE>"));
if (NULL == bstrFileName)
{
    //handle error
}

// pEnroll is a previously instantiated ICEnroll interface pointer.
hr = pEnroll->acceptFilePKCS7( bstrFileName );
if (FAILED(hr))
    printf("Failed acceptFilePKCS7 - %x\n", hr );
else
    printf("Accepted PKCS #7 from file %ws successfully\n", 
    bstrFileName );

// Free BSTR when done.
if (bstrFileName)
    SysFreeString(bstrFileName);
vtbl 9 HRESULT createPKCS10(LPWSTR DNName, LPWSTR Usage, LPWSTR* pPKCS10)

base64 エンコードされた PKCS を作成します (ICEnroll.createPKCS10)。

DNNameLPWSTRin要求の対象となるエンティティの識別名 (DN)。このパラメーターでは、DN 名は X.500 の命名規則に従う必要があります (例: "CN=User, O=Microsoft")。2 文字のプレフィックスが存在しない場合は、代わりに OID を指定できます。
UsageLPWSTRin

生成される証明書の目的を表す オブジェクト識別子 (OID)。たとえば、個人用または商用の Authenticode 証明書やクライアント認証などです。複数の OID をカンマ区切りで指定することもできます。

OID は PKCS #10 要求にそのまま渡されます。一般的な拡張性と理解のしやすさのため、コントロールは特定用途の OID を解釈しようとはしません。したがって、クライアント認証の OID を指定しても、生成されるキーは交換キーではなく、依然として署名キーになります。

pPKCS10LPWSTR*out返される base64 エンコードされた PKCS10 証明書要求。

戻り値

C++

戻り値は HRESULT です。S_OK は成功を示します。この関数が正常に完了すると、pPKCS10 に base64 エンコードされた PKCS #10 要求 (BSTR 形式) が格納されます。この形式は、処理のために Web サーバーへ直接ポストできる形式です。

VB

返される base64 エンコードされた PKCS10 証明書要求。

解説(Remarks)

既定では、Microsoft Base Cryptographic Provider が使用され、プロバイダーの種類は PROV_RSA_FULL で、署名キーが作成され、一意の新しいキーセットが作成されます。

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

BSTR bstrDN = NULL;
BSTR bstrReq = NULL;
BSTR bstrOID = NULL;
ICEnroll4 * pEnroll = NULL;
HRESULT hr;

// initialize COM
hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
if (FAILED(hr))
{
    printf("Failed CoInitializeEx - %x\n", hr);
    goto error;
}

hr = CoCreateInstance( __uuidof(CEnroll),
                       NULL,
                       CLSCTX_INPROC_SERVER,
                       __uuidof(ICEnroll4),
                       (void **)&pEnroll);
if (FAILED(hr))
{
    printf("Failed CoCreateInstance - pEnroll [%x]\n", hr);
    goto error;
}
// generate the DN for the cert request
bstrDN = SysAllocString( TEXT("CN=Your Name")   // common name
                         TEXT(",OU=Your Unit")  // org unit
                         TEXT(",O=Your Org")    // organization
                         TEXT(",L=Your City")   // locality
                         TEXT(",S=Your State")  // state
                         TEXT(",C=Your Country") );  // country/region
if (NULL == bstrDN)
{
    printf("Memory allocation failed for bstrDN.\n");
    goto error;
}

// generate the OID, for example, "1.3.6.1.4.1.311.2.1.21".
bstrOID = SysAllocString(TEXT("<OIDHERE>"));
if (NULL == bstrOID)
{
    printf("Memory allocation failed for bstrOID.\n");
    goto error;
}

// create the PKCS10
hr = pEnroll->createPKCS10( bstrDN, bstrOID, &bstrReq );
if (FAILED(hr))
{
    printf("Failed createPKCS10 - %x\n", hr);
    goto error;
}
else
    // do something with the PKCS10 (bstrReq);

error:

//clean up resources, and so on
if ( bstrDN )
    SysFreeString( bstrDN );
if ( bstrOID )
    SysFreeString( bstrOID );
if ( bstrReq )
    SysFreeString( bstrReq );
if ( pEnroll )
    pEnroll->Release();

CoUninitialize();
vtbl 10 HRESULT acceptPKCS7(LPWSTR PKCS7)

PKCS を受け入れて処理します (ICEnroll.acceptPKCS7)。

PKCS7LPWSTRin証明書と、発行者を識別する証明書チェーンを含む、base64 エンコードされた PKCS #7 を表します。

戻り値

VB

戻り値は HRESULT です。S_OK は成功を示します。この関数が正常に完了すると、PKCS #7 が受け入れられます。

解説(Remarks)

acceptPKCS7 のパラメーターとして入力される PKCS #7 には、要求された証明書と、その証明書の発行者を識別する証明書チェーンが含まれます。必須ではありませんが、通常、この証明書チェーンにルートは含まれません。PKCS #7 は、base64 エンコード、バイナリ、または X.509 証明書形式 (begin cert / end cert タグの有無は問いません) で指定できます。証明書と、それに対して生成された関連キーは MY ストアに格納されます。ルート証明書 は ROOT ストアに配置され、残りの証明書チェーンは 証明機関 (CA) ストアに配置されます。PKCS #7 に含まれるいずれかの ROOT 証明書が受け入れられる場合、Crypt32 は ROOT 証明書がストアに追加されようとしていることをユーザーに通知します。ユーザーはその ROOT 証明書を拒否できます。このオプションは、信頼されていないルートを ROOT ストアに配置することをユーザーが拒否できるようにするために用意されています。ROOT を ROOT ストアに配置することを拒否しても、Certificate Enrollment Control の受け入れ処理が失敗することはありません。

既定では、証明書の保管にシステムストア MY、CA、ROOT、REQUEST が使用されます。ただし、このメソッドを呼び出す前に次のプロパティを割り当てることで、他のストアを指定できます:

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

vtbl 11 HRESULT getCertFromPKCS7(LPWSTR wszPKCS7, LPWSTR* pbstrCert)

PKCS に含まれる証明書を取得します。

wszPKCS7LPWSTRin発行された証明書の取得元となる PKCS #7 を指定します。
pbstrCertLPWSTR*out発行された証明書を受け取る BSTR 変数へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

戻り値

C++

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

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

VB

発行された証明書を含む文字列。
vtbl 12 HRESULT enumProviders(INT dwIndex, INT dwFlags, LPWSTR* pbstrProvName)

ProviderType プロパティで指定された、利用可能な暗号化サービスプロバイダー (CSP) の名前を取得します。このメソッドは ICEnroll インターフェイスで初めて定義されました。

dwIndexINTin名前を取得する CSP の序数位置を指定します。最初の CSP の場合は 0 を指定します。
dwFlagsINTinCryptEnumProviders 関数にそのまま渡されるフラグを指定します。このパラメーターは現在使用されていません。0 を指定してください。
pbstrProvNameLPWSTR*out指定されたプロパティの種類を持つ CSP の名前を受け取る BSTR 変数へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

戻り値

C++

戻り値は HRESULT です。S_OK は成功を示します。ProviderType プロパティで示されるプロパティの種類を持つ CSP がなくなると、値 ERROR_NO_MORE_ITEMS が返されます。

VB

戻り値は、CSP の名前を含む String 変数です。エラーが発生した場合、または項目がなくなった場合は、例外が発生します。

解説(Remarks)

ProviderType プロパティの値が設定されていない場合は、レジストリに設定されている ProviderType の既定値 (通常は PROV_RSA_FULL) が使用されます。

enumProviders メソッドは CryptEnumProviders 関数を呼び出します。

BSTR       bstrProvName = NULL;
DWORD      nProv;
int        j;
HRESULT    hr;

// array of CSP provider types (see Wincrypt.h)
DWORD      nProvType[] = { PROV_RSA_FULL,      
                           PROV_RSA_SIG,       
                           // list shortened for brevity
                           //...
                           PROV_STT_ISS };

// Loop, for each Prov Type.
for (j = 0; j < (sizeof(nProvType)/sizeof(DWORD)); j++)
{
    nProv = 0;
    
    // pEnroll is previously instantiated ICEnroll interface pointer
    hr = pEnroll->put_ProviderType( nProvType[j] );
    if ( FAILED(hr))
    {
        printf("Failed put_ProviderType - %x\n", hr);
        goto error;
    }
    // Enumerate the CSPs of this type.
    while ( S_OK == ( hr = pEnroll->enumProviders(nProv,
                                                  0,
                                                  &bstrProvName)))
    {
        printf("Provider %ws (type %d )\n", bstrProvName, 
            nProvType[j] );
        nProv++;
        if ( bstrProvName )
        {
            SysFreeString( bstrProvName );
            bstrProvName = NULL;
        }
    }

    // Print message if provider type does not have any CSPs.
    if ( 0 == nProv )
       printf("There were no CSPs of type %d\n", dwType );
}

error:
// Clean up resources, and so on.
if ( bstrProvName )
    SysFreeString( bstrProvName );
vtbl 13 HRESULT enumContainers(INT dwIndex, LPWSTR* pbstr)

ProviderName プロパティで指定された暗号化サービスプロバイダー (CSP) のコンテナー名を取得します。このメソッドは ICEnroll インターフェイスで初めて定義されました。

dwIndexINTin名前を取得するコンテナーの序数位置を指定します。最初のコンテナーの場合は 0 を指定します。
pbstrLPWSTR*outコンテナーの名前を受け取る BSTR 変数へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。

戻り値

C++

戻り値は HRESULT です。S_OK は成功を示します。項目がなくなると、値 ERROR_NO_MORE_ITEMS が返されます。

VB

戻り値は、コンテナーの名前を表す String 変数です。エラーが発生した場合、または項目がなくなった場合は、例外が発生します。

解説(Remarks)

ProviderName プロパティの値が設定されていない場合は、レジストリに設定されている ProviderName の既定値 (通常は Microsoft Base Cryptographic Provider) が使用されます。

このメソッドは、証明書登録コントロール (Certificate Enrollment Control) がスクリプト化されたコントロールとして実行される場合は無効になります。

BSTR       bstrCon = NULL;
DWORD      nCon = 0;
HRESULT    hr;

// pEnroll is previously instantiated ICEnroll interface pointer
while ( S_OK == pEnroll->enumContainers(nCon, &bstrCon) )
{
    printf("\t%d) %ws\n", nCon++, bstrCon );
    if ( bstrCon )
    {
        SysFreeString( bstrCon );
        bstrCon = NULL;
    }
}
vtbl 14 HRESULT freeRequestInfo(LPWSTR PKCS7OrPKCS10)

不要になったセッション識別子を解放します。

PKCS7OrPKCS10LPWSTRinデータを表すセッション識別子を指定します。
vtbl 15 HRESULT get_MyStoreName(LPWSTR* pbstrName)

リンクされた秘密キーを持つ証明書が保管されるストアの名前を設定または取得します。(Get)

pbstrNameLPWSTR*out個人(MY)証明書ストアの名前を受け取る LPWSTR へのポインタである。

解説(Remarks)

MyStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_MyStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting MyStoreName - %x\n", hr );
else
    printf( "MyStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName previously set to a valid store name
hr = pEnroll->put_MyStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting MyStoreName - %x\n", hr );
else
    printf( "MyStoreName was set to : %ws\n", bstrNewName );
vtbl 16 HRESULT put_MyStoreName(LPWSTR bstrName)

リンクされた秘密キーを持つ証明書が保管されるストアの名前を設定または取得します。(Put)

bstrNameLPWSTRin個人(MY)証明書ストアの名前を渡す。

解説(Remarks)

MyStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_MyStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting MyStoreName - %x\n", hr );
else
    printf( "MyStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName previously set to a valid store name
hr = pEnroll->put_MyStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting MyStoreName - %x\n", hr );
else
    printf( "MyStoreName was set to : %ws\n", bstrNewName );
vtbl 17 HRESULT get_MyStoreType(LPWSTR* pbstrType)

MyStoreName プロパティで指定されたストアの種類を設定または取得します。(Get)

pbstrTypeLPWSTR*out個人(MY)証明書ストアの種類を受け取る LPWSTR へのポインタである。

解説(Remarks)

MyStoreType プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_MyStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting MyStoreType - %x\n", hr );
else
    printf( "MyStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType previously set to a valid store type
hr = pEnroll->put_MyStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting MyStoreType - %x\n", hr );
else
    printf( "MyStoreType was set to %ws\n", bstrNewType );
vtbl 18 HRESULT put_MyStoreType(LPWSTR bstrType)

MyStoreName プロパティで指定されたストアの種類を設定または取得します。(Put)

bstrTypeLPWSTRin個人(MY)証明書ストアの種類を渡す。

解説(Remarks)

MyStoreType プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_MyStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting MyStoreType - %x\n", hr );
else
    printf( "MyStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType previously set to a valid store type
hr = pEnroll->put_MyStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting MyStoreType - %x\n", hr );
else
    printf( "MyStoreType was set to %ws\n", bstrNewType );
vtbl 19 HRESULT get_MyStoreFlags(INT* pdwFlags)

MY ストアに使用するレジストリの場所を設定または取得します。(Get)

pdwFlagsINT*out個人(MY)証明書ストアを開く際のフラグを受け取る INT へのポインタである。

解説(Remarks)

MyStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

MyStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_MyStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving MyStoreFlags - %x\n", hr );
else
    printf("MyStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_MyStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating MyStoreFlags - %x\n", hr );
else
    printf("Updated MyStoreFlags\n");
vtbl 20 HRESULT put_MyStoreFlags(INT dwFlags)

MY ストアに使用するレジストリの場所を設定または取得します。(Put)

dwFlagsINTin個人(MY)証明書ストアを開く際のフラグを渡す。

解説(Remarks)

MyStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

MyStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_MyStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving MyStoreFlags - %x\n", hr );
else
    printf("MyStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_MyStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating MyStoreFlags - %x\n", hr );
else
    printf("Updated MyStoreFlags\n");
vtbl 21 HRESULT get_CAStoreName(LPWSTR* pbstrName)

"ROOT" および "MY" 以外のすべての証明書が保管されるストアの名前を設定または取得します。(Get)

pbstrNameLPWSTR*out中間 CA 証明書ストアの名前を受け取る LPWSTR へのポインタである。

解説(Remarks)

CAStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_CAStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting CAStoreName - %x\n", hr );
else
    printf( "CAStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName previously set to a valid store name
hr = pEnroll->put_CAStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting CAStoreName - %x\n", hr );
else
    printf( "CAStoreName was set to : %ws\n", bstrNewName );
vtbl 22 HRESULT put_CAStoreName(LPWSTR bstrName)

"ROOT" および "MY" 以外のすべての証明書が保管されるストアの名前を設定または取得します。(Put)

bstrNameLPWSTRin中間 CA 証明書ストアの名前を渡す。

解説(Remarks)

CAStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_CAStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting CAStoreName - %x\n", hr );
else
    printf( "CAStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName previously set to a valid store name
hr = pEnroll->put_CAStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting CAStoreName - %x\n", hr );
else
    printf( "CAStoreName was set to : %ws\n", bstrNewName );
vtbl 23 HRESULT get_CAStoreType(LPWSTR* pbstrType)

CAStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Get)

pbstrTypeLPWSTR*out中間 CA 証明書ストアの種類を受け取る LPWSTR へのポインタである。

解説(Remarks)

CAStoreType プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_CAStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting CAStoreType - %x\n", hr );
else
    printf( "CAStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType previously set to a valid store type
hr = pEnroll->put_CAStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting CAStoreType - %x\n", hr );
else
    printf( "CAStoreType was set to %ws\n", bstrNewType );
vtbl 24 HRESULT put_CAStoreType(LPWSTR bstrType)

CAStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Put)

bstrTypeLPWSTRin中間 CA 証明書ストアの種類を渡す。

解説(Remarks)

CAStoreType プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_CAStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting CAStoreType - %x\n", hr );
else
    printf( "CAStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType previously set to a valid store type
hr = pEnroll->put_CAStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting CAStoreType - %x\n", hr );
else
    printf( "CAStoreType was set to %ws\n", bstrNewType );
vtbl 25 HRESULT get_CAStoreFlags(INT* pdwFlags)

ストアが開かれるときに証明機関 (CA) ストアを制御するフラグを設定または取得します。(Get)

pdwFlagsINT*out中間 CA 証明書ストアを開く際のフラグを受け取る INT へのポインタである。

解説(Remarks)

CAStoreFlags プロパティは、次のメソッドの動作に影響します:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_CAStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving CAStoreFlags - %x\n", hr );
else
    printf("CAStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_CAStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating CAStoreFlags - %x\n", hr );
else
    printf("Updated CAStoreFlags\n");
vtbl 26 HRESULT put_CAStoreFlags(INT dwFlags)

ストアが開かれるときに証明機関 (CA) ストアを制御するフラグを設定または取得します。(Put)

dwFlagsINTin中間 CA 証明書ストアを開く際のフラグを渡す。

解説(Remarks)

CAStoreFlags プロパティは、次のメソッドの動作に影響します:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_CAStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving CAStoreFlags - %x\n", hr );
else
    printf("CAStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_CAStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating CAStoreFlags - %x\n", hr );
else
    printf("Updated CAStoreFlags\n");
vtbl 27 HRESULT get_RootStoreName(LPWSTR* pbstrName)

本質的に信頼される自己署名ルート証明書がすべて保管されるルートストアの名前を設定または取得します。(Get)

pbstrNameLPWSTR*outルート証明書ストアの名前を受け取る LPWSTR へのポインタである。

解説(Remarks)

RootStoreName は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_RootStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting RootStoreName - %x\n", hr );
else
    printf( "RootStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName is a BSTR that is previously set to a valid store name
hr = pEnroll->put_RootStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting RootStoreName - %x\n", hr );
else
    printf( "RootStoreName was set to : %ws\n", bstrNewName );
vtbl 28 HRESULT put_RootStoreName(LPWSTR bstrName)

本質的に信頼される自己署名ルート証明書がすべて保管されるルートストアの名前を設定または取得します。(Put)

bstrNameLPWSTRinルート証明書ストアの名前を渡す。

解説(Remarks)

RootStoreName は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_RootStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting RootStoreName - %x\n", hr );
else
    printf( "RootStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName is a BSTR that is previously set to a valid store name
hr = pEnroll->put_RootStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting RootStoreName - %x\n", hr );
else
    printf( "RootStoreName was set to : %ws\n", bstrNewName );
vtbl 29 HRESULT get_RootStoreType(LPWSTR* pbstrType)

RootStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Get)

pbstrTypeLPWSTR*outルート証明書ストアの種類を受け取る LPWSTR へのポインタである。

解説(Remarks)

RootStoreType は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_RootStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting RootStoreType - %x\n", hr );
else
    printf( "RootStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType is a BSTR that is previously set to a valid store type
hr = pEnroll->put_RootStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting RootStoreType - %x\n", hr );
else
    printf( "RootStoreType was set to %ws\n", bstrNewType );
vtbl 30 HRESULT put_RootStoreType(LPWSTR bstrType)

RootStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Put)

bstrTypeLPWSTRinルート証明書ストアの種類を渡す。

解説(Remarks)

RootStoreType は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_RootStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting RootStoreType - %x\n", hr );
else
    printf( "RootStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType is a BSTR that is previously set to a valid store type
hr = pEnroll->put_RootStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting RootStoreType - %x\n", hr );
else
    printf( "RootStoreType was set to %ws\n", bstrNewType );
vtbl 31 HRESULT get_RootStoreFlags(INT* pdwFlags)

ICEnroll4 の RootStoreFlags プロパティは、ルートストアに使用するレジストリの場所を設定または取得します。(Get)

pdwFlagsINT*outルート証明書ストアを開く際のフラグを受け取る INT へのポインタである。

解説(Remarks)

RootStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

RootStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer.

// Retrieve the flag value.
hr = pEnroll->get_RootStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving RootStoreFlags - %x\n", hr );
else
    printf("RootStoreFlags is %x\n", dwFlags );

// Set the flag.
hr = pEnroll->put_RootStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating RootStoreFlags - %x\n", hr );
else
    printf("Updated RootStoreFlags\n");
vtbl 32 HRESULT put_RootStoreFlags(INT dwFlags)

ICEnroll4 の RootStoreFlags プロパティは、ルートストアに使用するレジストリの場所を設定または取得します。(Put)

dwFlagsINTinルート証明書ストアを開く際のフラグを渡す。

解説(Remarks)

RootStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

RootStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer.

// Retrieve the flag value.
hr = pEnroll->get_RootStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving RootStoreFlags - %x\n", hr );
else
    printf("RootStoreFlags is %x\n", dwFlags );

// Set the flag.
hr = pEnroll->put_RootStoreFlags( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating RootStoreFlags - %x\n", hr );
else
    printf("Updated RootStoreFlags\n");
vtbl 33 HRESULT get_RequestStoreName(LPWSTR* pbstrName)

ダミー証明書を格納するストアの名前を設定または取得します。(Get)

pbstrNameLPWSTR*out要求(REQUEST)証明書ストアの名前を受け取る LPWSTR へのポインタである。

解説(Remarks)

通常、RequestStoreName プロパティの変更は高度なアプリケーションでのみ行われます。ほとんどのアプリケーションでは、この値を変更することは推奨されません。

RequestStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_RequestStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting RequestStoreName - %x\n", hr );
else
    printf( "RequestStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName is a BSTR that is previously set to a valid store name
hr = pEnroll->put_RequestStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting RequestStoreName - %x\n", hr );
else
    printf( "RequestStoreName was set to : %ws\n", bstrNewName );
vtbl 34 HRESULT put_RequestStoreName(LPWSTR bstrName)

ダミー証明書を格納するストアの名前を設定または取得します。(Put)

bstrNameLPWSTRin要求(REQUEST)証明書ストアの名前を渡す。

解説(Remarks)

通常、RequestStoreName プロパティの変更は高度なアプリケーションでのみ行われます。ほとんどのアプリケーションでは、この値を変更することは推奨されません。

RequestStoreName プロパティは、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storename
hr = pEnroll->get_RequestStoreName( &bstrStoreName );
if ( FAILED ( hr ) )
    printf("Failed getting RequestStoreName - %x\n", hr );
else
    printf( "RequestStoreName: %ws\n", bstrStoreName );
// free BSTR when done
if ( NULL != bstrStoreName )
    SysFreeString( bstrStoreName );

// set the storename
// bstrNewName is a BSTR that is previously set to a valid store name
hr = pEnroll->put_RequestStoreName( bstrNewName );
if ( FAILED ( hr ) )
    printf("Failed setting RequestStoreName - %x\n", hr );
else
    printf( "RequestStoreName was set to : %ws\n", bstrNewName );
vtbl 35 HRESULT get_RequestStoreType(LPWSTR* pbstrType)

RequestStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。このストアの種類は CertOpenStore 関数に直接渡されます。(Get)

pbstrTypeLPWSTR*out要求(REQUEST)証明書ストアの種類を受け取る LPWSTR へのポインタである。

解説(Remarks)

通常、RequestStoreType プロパティの変更は高度なアプリケーションでのみ行われます。

RequestStoreType は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_RequestStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting RequestStoreType - %x\n", hr );
else
    printf( "RequestStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType is a BSTR that is previously set to a valid store type
hr = pEnroll->put_RequestStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting RequestStoreType - %x\n", hr );
else
    printf( "RequestStoreType was set to %ws\n", bstrNewType );
vtbl 36 HRESULT put_RequestStoreType(LPWSTR bstrType)

RequestStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。このストアの種類は CertOpenStore 関数に直接渡されます。(Put)

bstrTypeLPWSTRin要求(REQUEST)証明書ストアの種類を渡す。

解説(Remarks)

通常、RequestStoreType プロパティの変更は高度なアプリケーションでのみ行われます。

RequestStoreType は、次のメソッドの動作に影響します:

Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。

BSTR     bstrStoreType = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the storetype
hr = pEnroll->get_RequestStoreType( &bstrStoreType );
if ( FAILED ( hr ) )
    printf("Failed getting RequestStoreType - %x\n", hr );
else
    printf( "RequestStoreType: %ws\n", bstrStoreType );
// free BSTR when done
if ( NULL != bstrStoreType )
    SysFreeString( bstrStoreType );

// set the storetype
// bstrNewType is a BSTR that is previously set to a valid store type
hr = pEnroll->put_RequestStoreType( bstrNewType );
if ( FAILED ( hr ) )
    printf("Failed setting RequestStoreType - %x\n", hr );
else
    printf( "RequestStoreType was set to %ws\n", bstrNewType );
vtbl 37 HRESULT get_RequestStoreFlags(INT* pdwFlags)

要求ストアに使用するレジストリの場所を設定または取得します。(Get)

pdwFlagsINT*out要求(REQUEST)証明書ストアを開く際のフラグを受け取る INT へのポインタである。

解説(Remarks)

RequestStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

通常、RequestStoreFlags プロパティの変更は高度なアプリケーションでのみ行われます。

RequestStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_RequestStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving RequestStoreFlags - %x\n", hr );
else
    printf("RequestStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_RequestStoreFlags
   ( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating RequestStoreFlags - %x\n", hr );
else
    printf("Updated RequestStoreFlags\n");
vtbl 38 HRESULT put_RequestStoreFlags(INT dwFlags)

要求ストアに使用するレジストリの場所を設定または取得します。(Put)

dwFlagsINTin要求(REQUEST)証明書ストアを開く際のフラグを渡す。

解説(Remarks)

RequestStoreFlags プロパティの値は、 CertOpenStore CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

通常、RequestStoreFlags プロパティの変更は高度なアプリケーションでのみ行われます。

RequestStoreFlags プロパティは、次のメソッドを使用する前に設定する必要があります:

DWORD    dwFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// retrieve the flag value
hr = pEnroll->get_RequestStoreFlags( &dwFlags );
if ( FAILED ( hr ) )
    printf("Failed retrieving RequestStoreFlags - %x\n", hr );
else
    printf("RequestStoreFlags is %x\n", dwFlags );

// set the flag
hr = pEnroll->put_RequestStoreFlags
   ( CERT_SYSTEM_STORE_LOCAL_MACHINE );
if ( FAILED ( hr ) )
    printf("Failed updating RequestStoreFlags - %x\n", hr );
else
    printf("Updated RequestStoreFlags\n");
vtbl 39 HRESULT get_ContainerName(LPWSTR* pbstrContainer)

ICEnroll4 の ContainerName プロパティは、使用するキーコンテナーの名前を設定または取得します。(Get)

pbstrContainerLPWSTR*out現在のキーコンテナ名を受け取る LPWSTR へのポインタである。

解説(Remarks)

指定するコンテナーは、既存のコンテナーでも新しいコンテナーでもかまいません。既存のコンテナーを指定できるのは、キーセットがまだ生成されておらず、UseExistingKeySet プロパティが設定されている場合に限られます。たとえば、あるコンテナーに対して 交換キー セットのみが生成されている場合でも、UseExistingKeySet を設定せずに署名キーセットを使用して証明書の登録(エンロール)を実行できます。UseExistingKeySet を事前に設定しておけば、交換キーセット を使用できます。

既定では、ICEnroll コントロールが実行されるたびに新しいコンテナーが選択されます。これにより、新しいキーセットが確実に生成されます。このプロパティが明示的に設定されていない場合は、生成された GUID がコンテナー名として使用されます。

ContainerName プロパティは、次のメソッドの動作に影響します:

BSTR     bstrContainerName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the container name
hr = pEnroll->get_ContainerName( &bstrContainerName );
if ( FAILED ( hr ) )
    printf("Failed getting ContainerName - %x\n", hr );
else
    printf( "ContainerName: %ws\n", bstrContainerName );
// free BSTR when done
if ( NULL != bstrContainerName )
    SysFreeString( bstrContainerName );

// set the container name
// bstrMyName previously set to a valid name
hr = pEnroll->put_ContainerName( bstrMyName );
if ( FAILED ( hr ) )
    printf("Failed setting ContainerName - %x\n", hr );
else
    printf( "ContainerName was set to %ws\n", bstrMyName );
vtbl 40 HRESULT put_ContainerName(LPWSTR bstrContainer)

ICEnroll4 の ContainerName プロパティは、使用するキーコンテナーの名前を設定または取得します。(Put)

bstrContainerLPWSTRin使用するキーコンテナ名を渡す。

解説(Remarks)

指定するコンテナーは、既存のコンテナーでも新しいコンテナーでもかまいません。既存のコンテナーを指定できるのは、キーセットがまだ生成されておらず、UseExistingKeySet プロパティが設定されている場合に限られます。たとえば、あるコンテナーに対して 交換キー セットのみが生成されている場合でも、UseExistingKeySet を設定せずに署名キーセットを使用して証明書の登録(エンロール)を実行できます。UseExistingKeySet を事前に設定しておけば、交換キーセット を使用できます。

既定では、ICEnroll コントロールが実行されるたびに新しいコンテナーが選択されます。これにより、新しいキーセットが確実に生成されます。このプロパティが明示的に設定されていない場合は、生成された GUID がコンテナー名として使用されます。

ContainerName プロパティは、次のメソッドの動作に影響します:

BSTR     bstrContainerName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the container name
hr = pEnroll->get_ContainerName( &bstrContainerName );
if ( FAILED ( hr ) )
    printf("Failed getting ContainerName - %x\n", hr );
else
    printf( "ContainerName: %ws\n", bstrContainerName );
// free BSTR when done
if ( NULL != bstrContainerName )
    SysFreeString( bstrContainerName );

// set the container name
// bstrMyName previously set to a valid name
hr = pEnroll->put_ContainerName( bstrMyName );
if ( FAILED ( hr ) )
    printf("Failed setting ContainerName - %x\n", hr );
else
    printf( "ContainerName was set to %ws\n", bstrMyName );
vtbl 41 HRESULT get_ProviderName(LPWSTR* pbstrProvider)

ICEnroll4 の ProviderName プロパティは、使用する暗号化サービスプロバイダー (CSP) の名前を設定または取得します。(Get)

pbstrProviderLPWSTR*out現在の暗号化サービスプロバイダー(CSP)名を受け取る LPWSTR へのポインタである。

解説(Remarks)

ProviderName プロパティは、次のメソッドの動作に影響します:

BSTR     bstrProvName = NULL;
BSTR     bstrMyProvName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the ProviderName
hr = pEnroll->get_ProviderName( &bstrProvName );
if (FAILED( hr ))
    printf("Failed get_ProviderName - %x\n", hr );
else
    printf( "ProviderName: %ws\n", bstrProvName );
// free BSTR when done
if ( NULL != bstrProvName )
    SysFreeString( bstrProvName );

// set the ProviderName value
bstrMyProvName = SysAllocString(TEXT("Microsoft Base DSS")
                                TEXT(" Cryptographic Provider"));
hr = pEnroll->put_ProviderName( bstrMyProvName );
if (FAILED( hr ))
    printf("Failed put_ProviderName - %x\n", hr );
else
    printf( "ProviderName set to %ws\n", bstrMyProvName );
// free BSTR when done
if ( NULL != bstrMyProvName )
    SysFreeString( bstrMyProvName );
vtbl 42 HRESULT put_ProviderName(LPWSTR bstrProvider)

ICEnroll4 の ProviderName プロパティは、使用する暗号化サービスプロバイダー (CSP) の名前を設定または取得します。(Put)

bstrProviderLPWSTRin使用する暗号化サービスプロバイダー(CSP)名を渡す。

解説(Remarks)

ProviderName プロパティは、次のメソッドの動作に影響します:

BSTR     bstrProvName = NULL;
BSTR     bstrMyProvName = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the ProviderName
hr = pEnroll->get_ProviderName( &bstrProvName );
if (FAILED( hr ))
    printf("Failed get_ProviderName - %x\n", hr );
else
    printf( "ProviderName: %ws\n", bstrProvName );
// free BSTR when done
if ( NULL != bstrProvName )
    SysFreeString( bstrProvName );

// set the ProviderName value
bstrMyProvName = SysAllocString(TEXT("Microsoft Base DSS")
                                TEXT(" Cryptographic Provider"));
hr = pEnroll->put_ProviderName( bstrMyProvName );
if (FAILED( hr ))
    printf("Failed put_ProviderName - %x\n", hr );
else
    printf( "ProviderName set to %ws\n", bstrMyProvName );
// free BSTR when done
if ( NULL != bstrMyProvName )
    SysFreeString( bstrMyProvName );
vtbl 43 HRESULT get_ProviderType(INT* pdwType)

ICEnroll4 の ProviderType プロパティは、プロバイダーの種類を設定または取得します。(Get)

pdwTypeINT*out現在のプロバイダーの種類(PROV_RSA_FULL など)を受け取る INT へのポインタである。

解説(Remarks)

プロバイダーの種類に関する一般的な情報については、 Cryptographic Provider Types を参照してください。

Microsoft Base Cryptographic Provider の有効な値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。

他の CSP のプロバイダーの種類の情報については、その CSP に付属のドキュメントを参照してください。

ProviderType プロパティの値は、CryptAcquireContextdwProvType パラメーターを通じて渡されます。

ProviderType プロパティは、次のメソッドの動作に影響します:

DWORD    dwProvType;
HRESULT  hr;

// Get the ProviderType value.
// pEnroll is previously instantiated ICEnroll interface pointer
hr = pEnroll->get_ProviderType(&dwProvType);
if (FAILED( hr ))
    printf("Failed get_ProviderType - %x\n", hr);
else
    printf("ProviderType: %d\n", dwProvType);

// Set the ProviderType value.
hr = pEnroll->put_ProviderType(PROV_MS_EXCHANGE);
if (FAILED(hr))
    printf("Failed put_ProviderType - %x\n", hr);
else
    printf("ProviderType set to %d\n", PROV_MS_EXCHANGE);
vtbl 44 HRESULT put_ProviderType(INT dwType)

ICEnroll4 の ProviderType プロパティは、プロバイダーの種類を設定または取得します。(Put)

dwTypeINTin使用するプロバイダーの種類(PROV_RSA_FULL など)を渡す。

解説(Remarks)

プロバイダーの種類に関する一般的な情報については、 Cryptographic Provider Types を参照してください。

Microsoft Base Cryptographic Provider の有効な値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。

他の CSP のプロバイダーの種類の情報については、その CSP に付属のドキュメントを参照してください。

ProviderType プロパティの値は、CryptAcquireContextdwProvType パラメーターを通じて渡されます。

ProviderType プロパティは、次のメソッドの動作に影響します:

DWORD    dwProvType;
HRESULT  hr;

// Get the ProviderType value.
// pEnroll is previously instantiated ICEnroll interface pointer
hr = pEnroll->get_ProviderType(&dwProvType);
if (FAILED( hr ))
    printf("Failed get_ProviderType - %x\n", hr);
else
    printf("ProviderType: %d\n", dwProvType);

// Set the ProviderType value.
hr = pEnroll->put_ProviderType(PROV_MS_EXCHANGE);
if (FAILED(hr))
    printf("Failed put_ProviderType - %x\n", hr);
else
    printf("ProviderType set to %d\n", PROV_MS_EXCHANGE);
vtbl 45 HRESULT get_KeySpec(INT* pdw)

ICEnroll4 の KeySpec プロパティは、生成されるキーの種類を設定または取得します。(Get)

pdwINT*out現在のキー仕様(AT_KEYEXCHANGE または AT_SIGNATURE)を受け取る INT へのポインタである。

解説(Remarks)

Microsoft Base Cryptographic Provider の場合、KeySpec プロパティの値は、交換キーでは AT_KEYEXCHANGE、署名キーでは AT_SIGNATURE になります。既定値は AT_SIGNATURE です。

他の Microsoft CSP に関する情報については、CryptoAPI 2.0 のドキュメントの Cryptographic Service Providers を参照してください。

他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。

KeySpec プロパティは、次のメソッドの動作に影響します:

DWORD    dwKeySpec;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the KeySpec value
hr = pEnroll->get_KeySpec( &dwKeySpec );
if (FAILED( hr ))
    printf("Failed get_KeySpec - %x\n", hr );
else
    printf( "KeySpec: %d\n", dwKeySpec );

// set the KeySpec value
hr = pEnroll->put_KeySpec( AT_KEYEXCHANGE );
if (FAILED( hr ))
    printf("Failed put_KeySpec - %x\n", hr );
else
    printf( "KeySpec set to %d\n", AT_KEYEXCHANGE );
vtbl 46 HRESULT put_KeySpec(INT dw)

ICEnroll4 の KeySpec プロパティは、生成されるキーの種類を設定または取得します。(Put)

dwINTin使用するキー仕様(AT_KEYEXCHANGE または AT_SIGNATURE)を渡す。

解説(Remarks)

Microsoft Base Cryptographic Provider の場合、KeySpec プロパティの値は、交換キーでは AT_KEYEXCHANGE、署名キーでは AT_SIGNATURE になります。既定値は AT_SIGNATURE です。

他の Microsoft CSP に関する情報については、CryptoAPI 2.0 のドキュメントの Cryptographic Service Providers を参照してください。

他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。

KeySpec プロパティは、次のメソッドの動作に影響します:

DWORD    dwKeySpec;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the KeySpec value
hr = pEnroll->get_KeySpec( &dwKeySpec );
if (FAILED( hr ))
    printf("Failed get_KeySpec - %x\n", hr );
else
    printf( "KeySpec: %d\n", dwKeySpec );

// set the KeySpec value
hr = pEnroll->put_KeySpec( AT_KEYEXCHANGE );
if (FAILED( hr ))
    printf("Failed put_KeySpec - %x\n", hr );
else
    printf( "KeySpec set to %d\n", AT_KEYEXCHANGE );
vtbl 47 HRESULT get_ProviderFlags(INT* pdwFlags)

プロバイダーの種類を設定または取得します。(Get)

pdwFlagsINT*outプロバイダーのコンテキスト取得時に使用するフラグを受け取る INT へのポインタである。

解説(Remarks)

Microsoft Base Cryptographic Provider に対する有効な ProviderFlags 値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。

他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。

ProviderFlags プロパティの値は、CryptAcquireContextdwFlags パラメーターを通じて渡されます。

ProviderFlags プロパティは、次のメソッドの動作に影響します:

DWORD    dwProvFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer
// get the ProviderFlags value
hr = pEnroll->get_ProviderFlags( &dwProvFlags );
if (FAILED( hr ))
    printf("Failed get_ProviderFlags - %x\n", hr );
else
    printf( "ProviderFlags: %d\n", dwProvFlags );

// Set the ProviderFlags value.
hr = pEnroll->put_ProviderFlags(CRYPT_MACHINE_KEYSET);
if (FAILED( hr ))
    printf("Failed put_ProviderFlags - %x\n", hr );
else
    printf( "ProviderFlags set to %d\n", CRYPT_MACHINE_KEYSET  );
vtbl 48 HRESULT put_ProviderFlags(INT dwFlags)

プロバイダーの種類を設定または取得します。(Put)

dwFlagsINTinプロバイダーのコンテキスト取得時に使用するフラグを渡す。

解説(Remarks)

Microsoft Base Cryptographic Provider に対する有効な ProviderFlags 値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。

他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。

ProviderFlags プロパティの値は、CryptAcquireContextdwFlags パラメーターを通じて渡されます。

ProviderFlags プロパティは、次のメソッドの動作に影響します:

DWORD    dwProvFlags;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer
// get the ProviderFlags value
hr = pEnroll->get_ProviderFlags( &dwProvFlags );
if (FAILED( hr ))
    printf("Failed get_ProviderFlags - %x\n", hr );
else
    printf( "ProviderFlags: %d\n", dwProvFlags );

// Set the ProviderFlags value.
hr = pEnroll->put_ProviderFlags(CRYPT_MACHINE_KEYSET);
if (FAILED( hr ))
    printf("Failed put_ProviderFlags - %x\n", hr );
else
    printf( "ProviderFlags set to %d\n", CRYPT_MACHINE_KEYSET  );
vtbl 49 HRESULT get_UseExistingKeySet(BOOL* fUseExistingKeys)

既存のキーを使用するかどうかを決定するブール値を設定または取得します。(Get)

fUseExistingKeysBOOL*out既存のキーセットを使用するかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

既存のキーセットを使用する場合は、UseExistingKeySet プロパティを true に設定する必要があります。

UseExistingKeySet プロパティは、次のメソッドの動作に影響します:

BOOL     bUEKS;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the UseExistingKeySet value
hr = pEnroll->get_UseExistingKeySet( &bUEKS );
if (FAILED( hr ))
    printf("Failed get_UseExistingKeySet - %x\n", hr );
else
    printf( "UseExistingKeySet: %d\n", bUEKS );

// set the UseExistingKeySet value
hr = pEnroll->put_UseExistingKeySet( TRUE );
if (FAILED( hr ))
    printf("Failed put_UseExistingKeySet - %x\n", hr );
else
    printf( "UseExistingKeySet set to TRUE\n" );
vtbl 50 HRESULT put_UseExistingKeySet(BOOL fUseExistingKeys)

既存のキーを使用するかどうかを決定するブール値を設定または取得します。(Put)

fUseExistingKeysBOOLin既存のキーセットを使用するかどうかを指定する BOOL 値を渡す。

解説(Remarks)

既存のキーセットを使用する場合は、UseExistingKeySet プロパティを true に設定する必要があります。

UseExistingKeySet プロパティは、次のメソッドの動作に影響します:

BOOL     bUEKS;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the UseExistingKeySet value
hr = pEnroll->get_UseExistingKeySet( &bUEKS );
if (FAILED( hr ))
    printf("Failed get_UseExistingKeySet - %x\n", hr );
else
    printf( "UseExistingKeySet: %d\n", bUEKS );

// set the UseExistingKeySet value
hr = pEnroll->put_UseExistingKeySet( TRUE );
if (FAILED( hr ))
    printf("Failed put_UseExistingKeySet - %x\n", hr );
else
    printf( "UseExistingKeySet set to TRUE\n" );
vtbl 51 HRESULT get_GenKeyFlags(INT* pdwFlags)

証明書要求の生成時に CryptGenKey 関数に渡される値を設定または取得します。(Get)

pdwFlagsINT*outキー生成時に使用するフラグ(エクスポート可否など)を受け取る INT へのポインタである。

解説(Remarks)

既定では、.pvk ファイルが要求されない限り、秘密キーはエクスポートできません。.pvk ファイルを指定せずに秘密キーをエクスポート可能にするには、GenKeyFlagsCRYPT_EXPORTABLE に設定します。

.pvk ファイル名を指定するには、PVKFileName プロパティを使用します。

GenKeyFlags プロパティの値は、 CryptGenKey CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

暗号化サービスプロバイダー (CSP) がエクスポート可能な秘密キーをサポートしていない場合は、エラーが発生します。

GenKeyFlags プロパティは、次のメソッドの動作に影響します:

注意 GenKeyFlags プロパティの既定値は 0 です。この値を変更する必要がある場合は、これらのメソッドを呼び出す前に変更する必要があります。これらのメソッドのいずれかを呼び出した後は、GenKeyFlags プロパティの値を変更できません。

LONG     lGenKey;
HRESULT  hr;

// pEnroll is a previously instantiated ICEnroll interface pointer.

// Get the GenKeyFlags value.
hr = pEnroll->get_GenKeyFlags( &lGenKey );
if (FAILED( hr ))
    printf("Failed get_GenKeyFlags - %x\n", hr );
else
    printf( "GenKeyFlags: %d\n", lGenKey );

// Set the GenKeyFlags value.
hr = pEnroll->put_GenKeyFlags( CRYPT_EXPORTABLE );
if (FAILED( hr ))
    printf("Failed put_GenKeyFlags - %x\n", hr );
else
    printf( "GenKeyFlags set to %d\n", CRYPT_EXPORTABLE );
vtbl 52 HRESULT put_GenKeyFlags(INT dwFlags)

証明書要求の生成時に CryptGenKey 関数に渡される値を設定または取得します。(Put)

dwFlagsINTinキー生成時に使用するフラグ(エクスポート可否など)を渡す。

解説(Remarks)

既定では、.pvk ファイルが要求されない限り、秘密キーはエクスポートできません。.pvk ファイルを指定せずに秘密キーをエクスポート可能にするには、GenKeyFlagsCRYPT_EXPORTABLE に設定します。

.pvk ファイル名を指定するには、PVKFileName プロパティを使用します。

GenKeyFlags プロパティの値は、 CryptGenKey CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。

暗号化サービスプロバイダー (CSP) がエクスポート可能な秘密キーをサポートしていない場合は、エラーが発生します。

GenKeyFlags プロパティは、次のメソッドの動作に影響します:

注意 GenKeyFlags プロパティの既定値は 0 です。この値を変更する必要がある場合は、これらのメソッドを呼び出す前に変更する必要があります。これらのメソッドのいずれかを呼び出した後は、GenKeyFlags プロパティの値を変更できません。

LONG     lGenKey;
HRESULT  hr;

// pEnroll is a previously instantiated ICEnroll interface pointer.

// Get the GenKeyFlags value.
hr = pEnroll->get_GenKeyFlags( &lGenKey );
if (FAILED( hr ))
    printf("Failed get_GenKeyFlags - %x\n", hr );
else
    printf( "GenKeyFlags: %d\n", lGenKey );

// Set the GenKeyFlags value.
hr = pEnroll->put_GenKeyFlags( CRYPT_EXPORTABLE );
if (FAILED( hr ))
    printf("Failed put_GenKeyFlags - %x\n", hr );
else
    printf( "GenKeyFlags set to %d\n", CRYPT_EXPORTABLE );
vtbl 53 HRESULT get_DeleteRequestCert(BOOL* fDelete)

要求ストア内のダミー証明書を削除するかどうかを決定するブール値を設定または取得します。(Get)

fDeleteBOOL*out登録完了後に要求証明書を削除するかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

DeleteRequestCert プロパティは、次のメソッドの動作に影響します:

BOOL     bDRC;
HRESULT  hr;


// pEnroll is a previously instantiated ICEnroll interface pointer.
// Get the DeleteRequestCert Boolean value.

hr = pEnroll->get_DeleteRequestCert( &bDRC );
if ( FAILED ( hr ) )
    printf("Failed getting DeleteRequestCert - %x\n", hr );
else
    printf( "DeleteRequestCert: %s\n", ( bDRC ? "TRUE" : "FALSE" ) );


// Set the DeleteRequestCert value.

hr = pEnroll->put_DeleteRequestCert( FALSE );
if ( FAILED ( hr ) )
    printf("Failed Setting DeleteRequestCert - %x\n", hr );
else
    printf( "DeleteRequestCert was set to FALSE\n" );
vtbl 54 HRESULT put_DeleteRequestCert(BOOL fDelete)

要求ストア内のダミー証明書を削除するかどうかを決定するブール値を設定または取得します。(Put)

fDeleteBOOLin登録完了後に要求証明書を削除するかどうかを指定する BOOL 値を渡す。

解説(Remarks)

DeleteRequestCert プロパティは、次のメソッドの動作に影響します:

BOOL     bDRC;
HRESULT  hr;


// pEnroll is a previously instantiated ICEnroll interface pointer.
// Get the DeleteRequestCert Boolean value.

hr = pEnroll->get_DeleteRequestCert( &bDRC );
if ( FAILED ( hr ) )
    printf("Failed getting DeleteRequestCert - %x\n", hr );
else
    printf( "DeleteRequestCert: %s\n", ( bDRC ? "TRUE" : "FALSE" ) );


// Set the DeleteRequestCert value.

hr = pEnroll->put_DeleteRequestCert( FALSE );
if ( FAILED ( hr ) )
    printf("Failed Setting DeleteRequestCert - %x\n", hr );
else
    printf( "DeleteRequestCert was set to FALSE\n" );
vtbl 55 HRESULT get_WriteCertToCSP(BOOL* fBool)

ICEnroll4 の WriteCertToCSP プロパティは、証明書を暗号化サービスプロバイダー (CSP) に書き込むかどうかを決定するブール値を設定または取得します。(Get)

fBoolBOOL*out証明書を CSP のキーコンテナに書き込むかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

このプロパティは通常スマートカードで使用され、証明書は "MY" ストアに書き込まれるのに加えて、スマートカードにも書き込まれます。

既定値は true です。これは、Certificate Enrollment Control が証明書を CSP に書き込もうとしますが、ハードウェアトークンエラーが発生しない限り失敗しないことを意味します。この値が true でも、スマートカードやその他のハードウェア依存の CSP がインストールされていない場合、ハードウェアトークンエラーは無視されます。

Certificate Enrollment Control が CSP への書き込みを試みないように明示的に強制するには、この値を false に設定します。

WriteCertToCSP は、次のメソッドの動作に影響します:

BOOL     bWriteCSP;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the WriteCertToCSP value
hr = pEnroll->get_WriteCertToCSP( &bWriteCSP );
if (FAILED( hr ))
    printf("Failed get_WriteCertToCSP - %x\n", hr );
else
    printf( "WriteCertToCSP: %d\n", bWriteCSP );

// set the WriteCertToCSP value
hr = pEnroll->put_WriteCertToCSP( TRUE );
if (FAILED( hr ))
    printf("Failed put_WriteCertToCSP - %x\n", hr );
else
    printf( "WriteCertToCSP set to TRUE\n" );
vtbl 56 HRESULT put_WriteCertToCSP(BOOL fBool)

ICEnroll4 の WriteCertToCSP プロパティは、証明書を暗号化サービスプロバイダー (CSP) に書き込むかどうかを決定するブール値を設定または取得します。(Put)

fBoolBOOLin証明書を CSP のキーコンテナに書き込むかどうかを指定する BOOL 値を渡す。

解説(Remarks)

このプロパティは通常スマートカードで使用され、証明書は "MY" ストアに書き込まれるのに加えて、スマートカードにも書き込まれます。

既定値は true です。これは、Certificate Enrollment Control が証明書を CSP に書き込もうとしますが、ハードウェアトークンエラーが発生しない限り失敗しないことを意味します。この値が true でも、スマートカードやその他のハードウェア依存の CSP がインストールされていない場合、ハードウェアトークンエラーは無視されます。

Certificate Enrollment Control が CSP への書き込みを試みないように明示的に強制するには、この値を false に設定します。

WriteCertToCSP は、次のメソッドの動作に影響します:

BOOL     bWriteCSP;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the WriteCertToCSP value
hr = pEnroll->get_WriteCertToCSP( &bWriteCSP );
if (FAILED( hr ))
    printf("Failed get_WriteCertToCSP - %x\n", hr );
else
    printf( "WriteCertToCSP: %d\n", bWriteCSP );

// set the WriteCertToCSP value
hr = pEnroll->put_WriteCertToCSP( TRUE );
if (FAILED( hr ))
    printf("Failed put_WriteCertToCSP - %x\n", hr );
else
    printf( "WriteCertToCSP set to TRUE\n" );
vtbl 57 HRESULT get_SPCFileName(LPWSTR* pbstr)

base64 エンコードされた PKCS を書き込むファイルの名前を設定または取得します。(Get)

pbstrLPWSTR*outソフトウェア発行元証明書(SPC)ファイルのパスを受け取る LPWSTR へのポインタである。

解説(Remarks)

ファイルはバイナリ PKCS #7 として書き込まれます。このファイルを指定しても、ユーザーのいずれかのストアへの証明書の受け入れには影響しません。

ファイルが既に存在する場合は、ユーザーに通知され、上書きの許可を求められます。

SPCFileName は、次のメソッドの動作に影響します:

BSTR     bstrSPCFile = NULL;
BSTR     bstrNewSPCFile = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the SPCFileName
hr = pEnroll->get_SPCFileName( &bstrSPCFile );
if (FAILED( hr ))
    printf("Failed get_SPCFileName - %x\n", hr );
else
    printf( "SPCFileName: %ws\n", bstrSPCFile );
// free BSTR when done
if ( NULL != bstrSPCFile )
    SysFreeString( bstrSPCFile );

// set the SPCFileName, for example, "MyFile.SPC".
bstrNewSPCFile = SysAllocString(TEXT("<FILENAMEHERE>"));

hr = pEnroll->put_SPCFileName( bstrNewSPCFile );
if (FAILED( hr ))
    printf("Failed put_SPCFileName - %x\n", hr );
else
    printf( "SPCFileName set to %ws\n", bstrNewSPCFile );
// free BSTR when done
if ( NULL != bstrNewSPCFile )
    SysFreeString( bstrNewSPCFile );
vtbl 58 HRESULT put_SPCFileName(LPWSTR bstr)

base64 エンコードされた PKCS を書き込むファイルの名前を設定または取得します。(Put)

bstrLPWSTRinソフトウェア発行元証明書(SPC)ファイルのパスを渡す。

解説(Remarks)

ファイルはバイナリ PKCS #7 として書き込まれます。このファイルを指定しても、ユーザーのいずれかのストアへの証明書の受け入れには影響しません。

ファイルが既に存在する場合は、ユーザーに通知され、上書きの許可を求められます。

SPCFileName は、次のメソッドの動作に影響します:

BSTR     bstrSPCFile = NULL;
BSTR     bstrNewSPCFile = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the SPCFileName
hr = pEnroll->get_SPCFileName( &bstrSPCFile );
if (FAILED( hr ))
    printf("Failed get_SPCFileName - %x\n", hr );
else
    printf( "SPCFileName: %ws\n", bstrSPCFile );
// free BSTR when done
if ( NULL != bstrSPCFile )
    SysFreeString( bstrSPCFile );

// set the SPCFileName, for example, "MyFile.SPC".
bstrNewSPCFile = SysAllocString(TEXT("<FILENAMEHERE>"));

hr = pEnroll->put_SPCFileName( bstrNewSPCFile );
if (FAILED( hr ))
    printf("Failed put_SPCFileName - %x\n", hr );
else
    printf( "SPCFileName set to %ws\n", bstrNewSPCFile );
// free BSTR when done
if ( NULL != bstrNewSPCFile )
    SysFreeString( bstrNewSPCFile );
vtbl 59 HRESULT get_PVKFileName(LPWSTR* pbstr)

ICEnroll4 の PVKFileName プロパティは、エクスポートされたキーを格納するファイルの名前を設定または取得します。(Get)

pbstrLPWSTR*out秘密キー(PVK)ファイルのパスを受け取る LPWSTR へのポインタである。

解説(Remarks)

PVKFileName プロパティは、次のメソッドの動作に影響します:

エクスポート機能は、暗号化サービスプロバイダー (CSP) によってはサポートされていない場合があります。これまで Authenticode は、秘密キー をディスク上の .pvk ファイルにエクスポートし、レジストリからキーを削除してきました。既定では、秘密キーはエクスポート用には生成されず、多くの暗号化サービスプロバイダーはキーのエクスポートをサポートしていません。ただし、CSP が秘密キーのエクスポートをサポートしている場合、PVKFileName プロパティに NULL 以外の値を指定すると、秘密キーがエクスポート可能な形で生成され、秘密キーと公開キーが PVKFileName プロパティで指定されたファイルに書き込まれます。秘密キーは CSP から削除されます。プロパティで指定するファイル名には、アクセス可能な任意のファイルを使用できます。既定では、.pvk ファイルは生成されず、キーはエクスポート可能な形では生成されません。

.pvk ファイルが既に存在する場合は、ユーザーに通知され、上書きの許可を求められます。

GenKeyFlags プロパティにも、秘密キーをエクスポートできるかどうかを制御するフラグがあります。GenKeyFlags プロパティと PVKFileName プロパティを一緒に使用する場合は注意してください。PVKFileName プロパティを先に設定すると、GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。CRYPT_EXPORTABLE フラグを含めずに (put_GenKeyFlags 関数を使用して) GenKeyFlags プロパティを設定した場合、GenKeyFlagsCRYPT_EXPORTABLE に設定されず、生成されるキーはエクスポートできません。次の手順はこれを示しています:

  1. put_PVKFileName を呼び出して、エクスポートされたキーを受け取るファイルのファイル名を設定します。GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。
  2. CRYPT_EXPORTABLE に設定されていない値 (たとえば 0) で put_GenKeyFlags を呼び出します。
  3. GenKeyFlagsCRYPT_EXPORTABLE に設定されなくなります (手順 1 で自動的に設定された値)。

上記の手順に従って生成されたキーは、エクスポートできません。したがって、これらを一緒に使用する場合は、PVKFileName プロパティより先に GenKeyFlags プロパティを設定することをお勧めします。

あるいは、GenKeyFlags プロパティ内の CRYPT_EXPORTABLE ビットの現在の値を調べ、その値と GenKeyFlags プロパティに加える変更との間でビットごとの OR 演算を行って、このビットが消去されないようにすることもできます。また、GenKeyFlags プロパティを更新する際に、CRYPT_EXPORTABLE ビットを明示的に設定することもできます。

BSTR     bstrPVKFile = NULL;
BSTR     bstrNewPVKFile = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the PVKFileName
hr = pEnroll->get_PVKFileName( &bstrPVKFile );
if (FAILED( hr ))
    printf("Failed get_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName: %ws\n", bstrPVKFile );
// free BSTR when done
if ( NULL != bstrPVKFile )
    SysFreeString( bstrPVKFile );

// set the PVKFileName, for example, "MyKeys.pvk"
bstrNewPVKFile = SysAllocString(TEXT("FILENAMEHERE"));

hr = pEnroll->put_PVKFileName( bstrNewPVKFile );
if (FAILED( hr ))
    printf("Failed put_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName set to %ws\n", bstrNewPVKFile );
// free BSTR when done
if ( NULL != bstrNewPVKFile )
    SysFreeString( bstrNewPVKFile );
vtbl 60 HRESULT put_PVKFileName(LPWSTR bstr)

ICEnroll4 の PVKFileName プロパティは、エクスポートされたキーを格納するファイルの名前を設定または取得します。(Put)

bstrLPWSTRin秘密キー(PVK)ファイルのパスを渡す。

解説(Remarks)

PVKFileName プロパティは、次のメソッドの動作に影響します:

エクスポート機能は、暗号化サービスプロバイダー (CSP) によってはサポートされていない場合があります。これまで Authenticode は、秘密キー をディスク上の .pvk ファイルにエクスポートし、レジストリからキーを削除してきました。既定では、秘密キーはエクスポート用には生成されず、多くの暗号化サービスプロバイダーはキーのエクスポートをサポートしていません。ただし、CSP が秘密キーのエクスポートをサポートしている場合、PVKFileName プロパティに NULL 以外の値を指定すると、秘密キーがエクスポート可能な形で生成され、秘密キーと公開キーが PVKFileName プロパティで指定されたファイルに書き込まれます。秘密キーは CSP から削除されます。プロパティで指定するファイル名には、アクセス可能な任意のファイルを使用できます。既定では、.pvk ファイルは生成されず、キーはエクスポート可能な形では生成されません。

.pvk ファイルが既に存在する場合は、ユーザーに通知され、上書きの許可を求められます。

GenKeyFlags プロパティにも、秘密キーをエクスポートできるかどうかを制御するフラグがあります。GenKeyFlags プロパティと PVKFileName プロパティを一緒に使用する場合は注意してください。PVKFileName プロパティを先に設定すると、GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。CRYPT_EXPORTABLE フラグを含めずに (put_GenKeyFlags 関数を使用して) GenKeyFlags プロパティを設定した場合、GenKeyFlagsCRYPT_EXPORTABLE に設定されず、生成されるキーはエクスポートできません。次の手順はこれを示しています:

  1. put_PVKFileName を呼び出して、エクスポートされたキーを受け取るファイルのファイル名を設定します。GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。
  2. CRYPT_EXPORTABLE に設定されていない値 (たとえば 0) で put_GenKeyFlags を呼び出します。
  3. GenKeyFlagsCRYPT_EXPORTABLE に設定されなくなります (手順 1 で自動的に設定された値)。

上記の手順に従って生成されたキーは、エクスポートできません。したがって、これらを一緒に使用する場合は、PVKFileName プロパティより先に GenKeyFlags プロパティを設定することをお勧めします。

あるいは、GenKeyFlags プロパティ内の CRYPT_EXPORTABLE ビットの現在の値を調べ、その値と GenKeyFlags プロパティに加える変更との間でビットごとの OR 演算を行って、このビットが消去されないようにすることもできます。また、GenKeyFlags プロパティを更新する際に、CRYPT_EXPORTABLE ビットを明示的に設定することもできます。

BSTR     bstrPVKFile = NULL;
BSTR     bstrNewPVKFile = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the PVKFileName
hr = pEnroll->get_PVKFileName( &bstrPVKFile );
if (FAILED( hr ))
    printf("Failed get_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName: %ws\n", bstrPVKFile );
// free BSTR when done
if ( NULL != bstrPVKFile )
    SysFreeString( bstrPVKFile );

// set the PVKFileName, for example, "MyKeys.pvk"
bstrNewPVKFile = SysAllocString(TEXT("FILENAMEHERE"));

hr = pEnroll->put_PVKFileName( bstrNewPVKFile );
if (FAILED( hr ))
    printf("Failed put_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName set to %ws\n", bstrNewPVKFile );
// free BSTR when done
if ( NULL != bstrNewPVKFile )
    SysFreeString( bstrNewPVKFile );
vtbl 61 HRESULT get_HashAlgorithm(LPWSTR* pbstr)

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

pbstrLPWSTR*out使用するハッシュアルゴリズム名を受け取る LPWSTR へのポインタである。

解説(Remarks)

この署名 ハッシュ アルゴリズム は、証明書の署名に使用される ハッシュ アルゴリズム と混同しないでください。エンロールコントロールは現在、ハッシュ アルゴリズム に対して任意の OID をサポートしているほか、次の表示名の値もサポートしています: SHA1 (既定値)、MD2、MD5。このプロパティを取得すると、取得される値は OID 形式になります (つまり、SHA1 は 1.3.14.3.2.29 として表示されます)。このプロパティを設定するときは、定義済みのフレンドリ値として示されているテキストの代わりに、対応する OID 形式を使用できます。

Certificate Enrollment Control は、HashAlgorithm プロパティの値を、PKCS #10 証明書要求の署名に使用する ハッシュ アルゴリズム のヒントとして扱います。暗号化サービスプロバイダー (CSP) が HashAlgorithm プロパティで指定されたアルゴリズムをサポートしている場合、そのアルゴリズムが使用されます。サポートしていない場合、Certificate Enrollment Control は SHA1 の使用を試みます。SHA1 が CSP でサポートされていない場合は、MD5 が試されます。SHA1 と MD5 のどちらもサポートされていない場合、Certificate Enrollment Control は CSP から返される最初の ハッシュ アルゴリズム の使用を試みます。

HashAlgorithm プロパティは、次のメソッドの動作に影響します:

HashAlgID プロパティと HashAlgorithm プロパティの両方が設定されている場合、最後に更新されたほうが、PKCS #10 証明書要求の署名に使用する ハッシュ アルゴリズム を決定します。

BSTR     bstrHashAlg = NULL;
HRESULT  hr;

// get the hash algorithm
hr = pEnroll->get_HashAlgorithm( &bstrHashAlg );
if ( FAILED ( hr ) )
    printf("Failed get_HashAlgorithm - %x\n", hr );
else
    printf( "HashAlgorithm: %ws\n", bstrHashAlg );
// free BSTR
if ( NULL != bstrHashAlg )
    SysFreeString( bstrHashAlg);

BSTR    bstrMyHashAlg = SysAllocString(TEXT("MD5"));
// alternatively, ... = SysAllocString(TEXT("1.2.840.113549.1.1.4"));

// set the hash algorithm
hr = pEnroll->put_HashAlgorithm( bstrMyHashAlg );
if ( FAILED ( hr ) )
    printf("Failed put_HashAlgorithm - %x\n", hr );
else
    printf( "HashAlgorithm was set to %ws\n", bstrMyHashAlg );
// free BSTR
if ( NULL != bstrMyHashAlg )
    SysFreeString( bstrMyHashAlg);
vtbl 62 HRESULT put_HashAlgorithm(LPWSTR bstr)

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

bstrLPWSTRin使用するハッシュアルゴリズム名を渡す。

解説(Remarks)

この署名 ハッシュ アルゴリズム は、証明書の署名に使用される ハッシュ アルゴリズム と混同しないでください。エンロールコントロールは現在、ハッシュ アルゴリズム に対して任意の OID をサポートしているほか、次の表示名の値もサポートしています: SHA1 (既定値)、MD2、MD5。このプロパティを取得すると、取得される値は OID 形式になります (つまり、SHA1 は 1.3.14.3.2.29 として表示されます)。このプロパティを設定するときは、定義済みのフレンドリ値として示されているテキストの代わりに、対応する OID 形式を使用できます。

Certificate Enrollment Control は、HashAlgorithm プロパティの値を、PKCS #10 証明書要求の署名に使用する ハッシュ アルゴリズム のヒントとして扱います。暗号化サービスプロバイダー (CSP) が HashAlgorithm プロパティで指定されたアルゴリズムをサポートしている場合、そのアルゴリズムが使用されます。サポートしていない場合、Certificate Enrollment Control は SHA1 の使用を試みます。SHA1 が CSP でサポートされていない場合は、MD5 が試されます。SHA1 と MD5 のどちらもサポートされていない場合、Certificate Enrollment Control は CSP から返される最初の ハッシュ アルゴリズム の使用を試みます。

HashAlgorithm プロパティは、次のメソッドの動作に影響します:

HashAlgID プロパティと HashAlgorithm プロパティの両方が設定されている場合、最後に更新されたほうが、PKCS #10 証明書要求の署名に使用する ハッシュ アルゴリズム を決定します。

BSTR     bstrHashAlg = NULL;
HRESULT  hr;

// get the hash algorithm
hr = pEnroll->get_HashAlgorithm( &bstrHashAlg );
if ( FAILED ( hr ) )
    printf("Failed get_HashAlgorithm - %x\n", hr );
else
    printf( "HashAlgorithm: %ws\n", bstrHashAlg );
// free BSTR
if ( NULL != bstrHashAlg )
    SysFreeString( bstrHashAlg);

BSTR    bstrMyHashAlg = SysAllocString(TEXT("MD5"));
// alternatively, ... = SysAllocString(TEXT("1.2.840.113549.1.1.4"));

// set the hash algorithm
hr = pEnroll->put_HashAlgorithm( bstrMyHashAlg );
if ( FAILED ( hr ) )
    printf("Failed put_HashAlgorithm - %x\n", hr );
else
    printf( "HashAlgorithm was set to %ws\n", bstrMyHashAlg );
// free BSTR
if ( NULL != bstrMyHashAlg )
    SysFreeString( bstrMyHashAlg);
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ICEnroll "{43F8F288-7A20-11D0-8F06-00C04FC295E1}"
#usecom global ICEnroll IID_ICEnroll "{43F8F289-7A20-11D0-8F06-00C04FC295E1}"
#comfunc global ICEnroll_createFilePKCS10       7 wstr,wstr,wstr
#comfunc global ICEnroll_acceptFilePKCS7        8 wstr
#comfunc global ICEnroll_createPKCS10           9 wstr,wstr,var
#comfunc global ICEnroll_acceptPKCS7            10 wstr
#comfunc global ICEnroll_getCertFromPKCS7       11 wstr,var
#comfunc global ICEnroll_enumProviders          12 int,int,var
#comfunc global ICEnroll_enumContainers         13 int,var
#comfunc global ICEnroll_freeRequestInfo        14 wstr
#comfunc global ICEnroll_get_MyStoreName        15 var
#comfunc global ICEnroll_put_MyStoreName        16 wstr
#comfunc global ICEnroll_get_MyStoreType        17 var
#comfunc global ICEnroll_put_MyStoreType        18 wstr
#comfunc global ICEnroll_get_MyStoreFlags       19 var
#comfunc global ICEnroll_put_MyStoreFlags       20 int
#comfunc global ICEnroll_get_CAStoreName        21 var
#comfunc global ICEnroll_put_CAStoreName        22 wstr
#comfunc global ICEnroll_get_CAStoreType        23 var
#comfunc global ICEnroll_put_CAStoreType        24 wstr
#comfunc global ICEnroll_get_CAStoreFlags       25 var
#comfunc global ICEnroll_put_CAStoreFlags       26 int
#comfunc global ICEnroll_get_RootStoreName      27 var
#comfunc global ICEnroll_put_RootStoreName      28 wstr
#comfunc global ICEnroll_get_RootStoreType      29 var
#comfunc global ICEnroll_put_RootStoreType      30 wstr
#comfunc global ICEnroll_get_RootStoreFlags     31 var
#comfunc global ICEnroll_put_RootStoreFlags     32 int
#comfunc global ICEnroll_get_RequestStoreName   33 var
#comfunc global ICEnroll_put_RequestStoreName   34 wstr
#comfunc global ICEnroll_get_RequestStoreType   35 var
#comfunc global ICEnroll_put_RequestStoreType   36 wstr
#comfunc global ICEnroll_get_RequestStoreFlags  37 var
#comfunc global ICEnroll_put_RequestStoreFlags  38 int
#comfunc global ICEnroll_get_ContainerName      39 var
#comfunc global ICEnroll_put_ContainerName      40 wstr
#comfunc global ICEnroll_get_ProviderName       41 var
#comfunc global ICEnroll_put_ProviderName       42 wstr
#comfunc global ICEnroll_get_ProviderType       43 var
#comfunc global ICEnroll_put_ProviderType       44 int
#comfunc global ICEnroll_get_KeySpec            45 var
#comfunc global ICEnroll_put_KeySpec            46 int
#comfunc global ICEnroll_get_ProviderFlags      47 var
#comfunc global ICEnroll_put_ProviderFlags      48 int
#comfunc global ICEnroll_get_UseExistingKeySet  49 var
#comfunc global ICEnroll_put_UseExistingKeySet  50 int
#comfunc global ICEnroll_get_GenKeyFlags        51 var
#comfunc global ICEnroll_put_GenKeyFlags        52 int
#comfunc global ICEnroll_get_DeleteRequestCert  53 var
#comfunc global ICEnroll_put_DeleteRequestCert  54 int
#comfunc global ICEnroll_get_WriteCertToCSP     55 var
#comfunc global ICEnroll_put_WriteCertToCSP     56 int
#comfunc global ICEnroll_get_SPCFileName        57 var
#comfunc global ICEnroll_put_SPCFileName        58 wstr
#comfunc global ICEnroll_get_PVKFileName        59 var
#comfunc global ICEnroll_put_PVKFileName        60 wstr
#comfunc global ICEnroll_get_HashAlgorithm      61 var
#comfunc global ICEnroll_put_HashAlgorithm      62 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。