ICEnroll
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ICEnroll インターフェイスは、Certificate Enrollment Control を表す複数のインターフェイスの 1 つです。
メソッド 56
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
base64 エンコードされた PKCS を作成します (ICEnroll.createFilePKCS10)。
| DNName | LPWSTR | in | 要求の対象となるエンティティの識別名 (DN)。DNName は X.500 の命名規則に従う必要があります (例: "CN=User, O=Microsoft")。2 文字のプレフィックスが存在しない場合は、代わりに オブジェクト識別子 (OID) を指定できます。 |
| Usage | LPWSTR | in | 生成される証明書の用途を記述する OID。たとえば、個人用または商用の Authenticode 証明書、あるいはクライアント認証などです。コンマで区切って複数の OID を指定することもできます。 OID は PKCS #10 要求にそのまま渡されます。コントロールは OID を検査しません。 |
| wszPKCS10FileName | LPWSTR | in | base64 エンコードされた 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();
PKCS を含むファイルを受け入れて処理します。
| wszPKCS7FileName | LPWSTR | in | PKCS #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);
base64 エンコードされた PKCS を作成します (ICEnroll.createPKCS10)。
| DNName | LPWSTR | in | 要求の対象となるエンティティの識別名 (DN)。このパラメーターでは、DN 名は X.500 の命名規則に従う必要があります (例: "CN=User, O=Microsoft")。2 文字のプレフィックスが存在しない場合は、代わりに OID を指定できます。 |
| Usage | LPWSTR | in | 生成される証明書の目的を表す オブジェクト識別子 (OID)。たとえば、個人用または商用の Authenticode 証明書やクライアント認証などです。複数の OID をカンマ区切りで指定することもできます。 OID は PKCS #10 要求にそのまま渡されます。一般的な拡張性と理解のしやすさのため、コントロールは特定用途の OID を解釈しようとはしません。したがって、クライアント認証の OID を指定しても、生成されるキーは交換キーではなく、依然として署名キーになります。 |
| pPKCS10 | LPWSTR* | 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();
PKCS を受け入れて処理します (ICEnroll.acceptPKCS7)。
| PKCS7 | LPWSTR | in | 証明書と、発行者を識別する証明書チェーンを含む、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 が使用されます。ただし、このメソッドを呼び出す前に次のプロパティを割り当てることで、他のストアを指定できます:
このメソッドがスクリプトから呼び出されると、証明書のインストールをユーザーが許可するかどうかを尋ねるユーザーインターフェイスが表示されます。
PKCS に含まれる証明書を取得します。
| wszPKCS7 | LPWSTR | in | 発行された証明書の取得元となる PKCS #7 を指定します。 |
| pbstrCert | LPWSTR* | out | 発行された証明書を受け取る BSTR 変数へのポインター。BSTR の使用が終わったら、SysFreeString 関数を呼び出して解放してください。 |
戻り値
C++
メソッドが成功した場合、S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
発行された証明書を含む文字列。ProviderType プロパティで指定された、利用可能な暗号化サービスプロバイダー (CSP) の名前を取得します。このメソッドは ICEnroll インターフェイスで初めて定義されました。
| dwIndex | INT | in | 名前を取得する CSP の序数位置を指定します。最初の CSP の場合は 0 を指定します。 |
| dwFlags | INT | in | CryptEnumProviders 関数にそのまま渡されるフラグを指定します。このパラメーターは現在使用されていません。0 を指定してください。 |
| pbstrProvName | LPWSTR* | 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 );
ProviderName プロパティで指定された暗号化サービスプロバイダー (CSP) のコンテナー名を取得します。このメソッドは ICEnroll インターフェイスで初めて定義されました。
| dwIndex | INT | in | 名前を取得するコンテナーの序数位置を指定します。最初のコンテナーの場合は 0 を指定します。 |
| pbstr | LPWSTR* | 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;
}
}
不要になったセッション識別子を解放します。
| PKCS7OrPKCS10 | LPWSTR | in | データを表すセッション識別子を指定します。 |
リンクされた秘密キーを持つ証明書が保管されるストアの名前を設定または取得します。(Get)
| pbstrName | LPWSTR* | 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 );
リンクされた秘密キーを持つ証明書が保管されるストアの名前を設定または取得します。(Put)
| bstrName | LPWSTR | in | 個人(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 );
MyStoreName プロパティで指定されたストアの種類を設定または取得します。(Get)
| pbstrType | LPWSTR* | 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 );
MyStoreName プロパティで指定されたストアの種類を設定または取得します。(Put)
| bstrType | LPWSTR | in | 個人(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 );
MY ストアに使用するレジストリの場所を設定または取得します。(Get)
| pdwFlags | INT* | 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");
MY ストアに使用するレジストリの場所を設定または取得します。(Put)
| dwFlags | INT | in | 個人(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");
"ROOT" および "MY" 以外のすべての証明書が保管されるストアの名前を設定または取得します。(Get)
| pbstrName | LPWSTR* | 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 );
"ROOT" および "MY" 以外のすべての証明書が保管されるストアの名前を設定または取得します。(Put)
| bstrName | LPWSTR | in | 中間 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 );
CAStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Get)
| pbstrType | LPWSTR* | 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 );
CAStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Put)
| bstrType | LPWSTR | in | 中間 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 );
ストアが開かれるときに証明機関 (CA) ストアを制御するフラグを設定または取得します。(Get)
| pdwFlags | INT* | 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");
ストアが開かれるときに証明機関 (CA) ストアを制御するフラグを設定または取得します。(Put)
| dwFlags | INT | in | 中間 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");
本質的に信頼される自己署名ルート証明書がすべて保管されるルートストアの名前を設定または取得します。(Get)
| pbstrName | LPWSTR* | 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 );
本質的に信頼される自己署名ルート証明書がすべて保管されるルートストアの名前を設定または取得します。(Put)
| bstrName | LPWSTR | in | ルート証明書ストアの名前を渡す。 |
解説(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 );
RootStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Get)
| pbstrType | LPWSTR* | 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 );
RootStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。(Put)
| bstrType | LPWSTR | in | ルート証明書ストアの種類を渡す。 |
解説(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 );
ICEnroll4 の RootStoreFlags プロパティは、ルートストアに使用するレジストリの場所を設定または取得します。(Get)
| pdwFlags | INT* | 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");
ICEnroll4 の RootStoreFlags プロパティは、ルートストアに使用するレジストリの場所を設定または取得します。(Put)
| dwFlags | INT | in | ルート証明書ストアを開く際のフラグを渡す。 |
解説(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");
ダミー証明書を格納するストアの名前を設定または取得します。(Get)
| pbstrName | LPWSTR* | 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 );
ダミー証明書を格納するストアの名前を設定または取得します。(Put)
| bstrName | LPWSTR | in | 要求(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 );
RequestStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。このストアの種類は CertOpenStore 関数に直接渡されます。(Get)
| pbstrType | LPWSTR* | 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 );
RequestStoreName プロパティで指定されたストアに使用するストアの種類を設定または取得します。このストアの種類は CertOpenStore 関数に直接渡されます。(Put)
| bstrType | LPWSTR | in | 要求(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 );
要求ストアに使用するレジストリの場所を設定または取得します。(Get)
| pdwFlags | INT* | 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");
要求ストアに使用するレジストリの場所を設定または取得します。(Put)
| dwFlags | INT | in | 要求(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");
ICEnroll4 の ContainerName プロパティは、使用するキーコンテナーの名前を設定または取得します。(Get)
| pbstrContainer | LPWSTR* | 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 );
ICEnroll4 の ContainerName プロパティは、使用するキーコンテナーの名前を設定または取得します。(Put)
| bstrContainer | LPWSTR | in | 使用するキーコンテナ名を渡す。 |
解説(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 );
ICEnroll4 の ProviderName プロパティは、使用する暗号化サービスプロバイダー (CSP) の名前を設定または取得します。(Get)
| pbstrProvider | LPWSTR* | 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 );
ICEnroll4 の ProviderName プロパティは、使用する暗号化サービスプロバイダー (CSP) の名前を設定または取得します。(Put)
| bstrProvider | LPWSTR | in | 使用する暗号化サービスプロバイダー(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 );
ICEnroll4 の ProviderType プロパティは、プロバイダーの種類を設定または取得します。(Get)
| pdwType | INT* | out | 現在のプロバイダーの種類(PROV_RSA_FULL など)を受け取る INT へのポインタである。 |
解説(Remarks)
プロバイダーの種類に関する一般的な情報については、 Cryptographic Provider Types を参照してください。
Microsoft Base Cryptographic Provider の有効な値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。
他の CSP のプロバイダーの種類の情報については、その CSP に付属のドキュメントを参照してください。
ProviderType プロパティの値は、CryptAcquireContext の dwProvType パラメーターを通じて渡されます。
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);
ICEnroll4 の ProviderType プロパティは、プロバイダーの種類を設定または取得します。(Put)
| dwType | INT | in | 使用するプロバイダーの種類(PROV_RSA_FULL など)を渡す。 |
解説(Remarks)
プロバイダーの種類に関する一般的な情報については、 Cryptographic Provider Types を参照してください。
Microsoft Base Cryptographic Provider の有効な値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。
他の CSP のプロバイダーの種類の情報については、その CSP に付属のドキュメントを参照してください。
ProviderType プロパティの値は、CryptAcquireContext の dwProvType パラメーターを通じて渡されます。
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);
ICEnroll4 の KeySpec プロパティは、生成されるキーの種類を設定または取得します。(Get)
| pdw | INT* | 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 );
ICEnroll4 の KeySpec プロパティは、生成されるキーの種類を設定または取得します。(Put)
| dw | INT | in | 使用するキー仕様(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 );
プロバイダーの種類を設定または取得します。(Get)
| pdwFlags | INT* | out | プロバイダーのコンテキスト取得時に使用するフラグを受け取る INT へのポインタである。 |
解説(Remarks)
Microsoft Base Cryptographic Provider に対する有効な ProviderFlags 値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。
他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。
ProviderFlags プロパティの値は、CryptAcquireContext の dwFlags パラメーターを通じて渡されます。
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 );
プロバイダーの種類を設定または取得します。(Put)
| dwFlags | INT | in | プロバイダーのコンテキスト取得時に使用するフラグを渡す。 |
解説(Remarks)
Microsoft Base Cryptographic Provider に対する有効な ProviderFlags 値の詳細については、 CryptAcquireContext CryptoAPI 関数を参照してください。
他の CSP に関する情報については、その CSP に付属のドキュメントを参照してください。
ProviderFlags プロパティの値は、CryptAcquireContext の dwFlags パラメーターを通じて渡されます。
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 );
既存のキーを使用するかどうかを決定するブール値を設定または取得します。(Get)
| fUseExistingKeys | BOOL* | 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" );
既存のキーを使用するかどうかを決定するブール値を設定または取得します。(Put)
| fUseExistingKeys | BOOL | in | 既存のキーセットを使用するかどうかを指定する 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" );
証明書要求の生成時に CryptGenKey 関数に渡される値を設定または取得します。(Get)
| pdwFlags | INT* | out | キー生成時に使用するフラグ(エクスポート可否など)を受け取る INT へのポインタである。 |
解説(Remarks)
既定では、.pvk ファイルが要求されない限り、秘密キーはエクスポートできません。.pvk ファイルを指定せずに秘密キーをエクスポート可能にするには、GenKeyFlags を CRYPT_EXPORTABLE に設定します。
.pvk ファイル名を指定するには、PVKFileName プロパティを使用します。
GenKeyFlags プロパティの値は、 CryptGenKey CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。
暗号化サービスプロバイダー (CSP) がエクスポート可能な秘密キーをサポートしていない場合は、エラーが発生します。
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 );
証明書要求の生成時に CryptGenKey 関数に渡される値を設定または取得します。(Put)
| dwFlags | INT | in | キー生成時に使用するフラグ(エクスポート可否など)を渡す。 |
解説(Remarks)
既定では、.pvk ファイルが要求されない限り、秘密キーはエクスポートできません。.pvk ファイルを指定せずに秘密キーをエクスポート可能にするには、GenKeyFlags を CRYPT_EXPORTABLE に設定します。
.pvk ファイル名を指定するには、PVKFileName プロパティを使用します。
GenKeyFlags プロパティの値は、 CryptGenKey CryptoAPI 関数の dwFlags パラメーターを通じて渡されます。
暗号化サービスプロバイダー (CSP) がエクスポート可能な秘密キーをサポートしていない場合は、エラーが発生します。
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 );
要求ストア内のダミー証明書を削除するかどうかを決定するブール値を設定または取得します。(Get)
| fDelete | BOOL* | 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" );
要求ストア内のダミー証明書を削除するかどうかを決定するブール値を設定または取得します。(Put)
| fDelete | BOOL | in | 登録完了後に要求証明書を削除するかどうかを指定する 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" );
ICEnroll4 の WriteCertToCSP プロパティは、証明書を暗号化サービスプロバイダー (CSP) に書き込むかどうかを決定するブール値を設定または取得します。(Get)
| fBool | BOOL* | 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" );
ICEnroll4 の WriteCertToCSP プロパティは、証明書を暗号化サービスプロバイダー (CSP) に書き込むかどうかを決定するブール値を設定または取得します。(Put)
| fBool | BOOL | in | 証明書を 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" );
base64 エンコードされた PKCS を書き込むファイルの名前を設定または取得します。(Get)
| pbstr | LPWSTR* | 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 );
base64 エンコードされた PKCS を書き込むファイルの名前を設定または取得します。(Put)
| bstr | LPWSTR | in | ソフトウェア発行元証明書(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 );
ICEnroll4 の PVKFileName プロパティは、エクスポートされたキーを格納するファイルの名前を設定または取得します。(Get)
| pbstr | LPWSTR* | 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 プロパティを設定した場合、GenKeyFlags は CRYPT_EXPORTABLE に設定されず、生成されるキーはエクスポートできません。次の手順はこれを示しています:
- put_PVKFileName を呼び出して、エクスポートされたキーを受け取るファイルのファイル名を設定します。GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。
- CRYPT_EXPORTABLE に設定されていない値 (たとえば 0) で put_GenKeyFlags を呼び出します。
- GenKeyFlags は CRYPT_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 );
ICEnroll4 の PVKFileName プロパティは、エクスポートされたキーを格納するファイルの名前を設定または取得します。(Put)
| bstr | LPWSTR | in | 秘密キー(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 プロパティを設定した場合、GenKeyFlags は CRYPT_EXPORTABLE に設定されず、生成されるキーはエクスポートできません。次の手順はこれを示しています:
- put_PVKFileName を呼び出して、エクスポートされたキーを受け取るファイルのファイル名を設定します。GenKeyFlags プロパティは自動的に CRYPT_EXPORTABLE に設定されます。
- CRYPT_EXPORTABLE に設定されていない値 (たとえば 0) で put_GenKeyFlags を呼び出します。
- GenKeyFlags は CRYPT_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 );
PKCS の署名に使用する署名ハッシュ アルゴリズムのみを設定または取得します (ICEnroll.get_HashAlgorithm)。
| pbstr | LPWSTR* | 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);
PKCS の署名に使用する署名ハッシュ アルゴリズムのみを設定または取得します (ICEnroll.put_HashAlgorithm)。
| bstr | LPWSTR | in | 使用するハッシュアルゴリズム名を渡す。 |
解説(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 公式リファレンス: 英語 (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 不要)。#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,sptr #comfunc global ICEnroll_acceptPKCS7 10 wstr #comfunc global ICEnroll_getCertFromPKCS7 11 wstr,sptr #comfunc global ICEnroll_enumProviders 12 int,int,sptr #comfunc global ICEnroll_enumContainers 13 int,sptr #comfunc global ICEnroll_freeRequestInfo 14 wstr #comfunc global ICEnroll_get_MyStoreName 15 sptr #comfunc global ICEnroll_put_MyStoreName 16 wstr #comfunc global ICEnroll_get_MyStoreType 17 sptr #comfunc global ICEnroll_put_MyStoreType 18 wstr #comfunc global ICEnroll_get_MyStoreFlags 19 sptr #comfunc global ICEnroll_put_MyStoreFlags 20 int #comfunc global ICEnroll_get_CAStoreName 21 sptr #comfunc global ICEnroll_put_CAStoreName 22 wstr #comfunc global ICEnroll_get_CAStoreType 23 sptr #comfunc global ICEnroll_put_CAStoreType 24 wstr #comfunc global ICEnroll_get_CAStoreFlags 25 sptr #comfunc global ICEnroll_put_CAStoreFlags 26 int #comfunc global ICEnroll_get_RootStoreName 27 sptr #comfunc global ICEnroll_put_RootStoreName 28 wstr #comfunc global ICEnroll_get_RootStoreType 29 sptr #comfunc global ICEnroll_put_RootStoreType 30 wstr #comfunc global ICEnroll_get_RootStoreFlags 31 sptr #comfunc global ICEnroll_put_RootStoreFlags 32 int #comfunc global ICEnroll_get_RequestStoreName 33 sptr #comfunc global ICEnroll_put_RequestStoreName 34 wstr #comfunc global ICEnroll_get_RequestStoreType 35 sptr #comfunc global ICEnroll_put_RequestStoreType 36 wstr #comfunc global ICEnroll_get_RequestStoreFlags 37 sptr #comfunc global ICEnroll_put_RequestStoreFlags 38 int #comfunc global ICEnroll_get_ContainerName 39 sptr #comfunc global ICEnroll_put_ContainerName 40 wstr #comfunc global ICEnroll_get_ProviderName 41 sptr #comfunc global ICEnroll_put_ProviderName 42 wstr #comfunc global ICEnroll_get_ProviderType 43 sptr #comfunc global ICEnroll_put_ProviderType 44 int #comfunc global ICEnroll_get_KeySpec 45 sptr #comfunc global ICEnroll_put_KeySpec 46 int #comfunc global ICEnroll_get_ProviderFlags 47 sptr #comfunc global ICEnroll_put_ProviderFlags 48 int #comfunc global ICEnroll_get_UseExistingKeySet 49 sptr #comfunc global ICEnroll_put_UseExistingKeySet 50 int #comfunc global ICEnroll_get_GenKeyFlags 51 sptr #comfunc global ICEnroll_put_GenKeyFlags 52 int #comfunc global ICEnroll_get_DeleteRequestCert 53 sptr #comfunc global ICEnroll_put_DeleteRequestCert 54 int #comfunc global ICEnroll_get_WriteCertToCSP 55 sptr #comfunc global ICEnroll_put_WriteCertToCSP 56 int #comfunc global ICEnroll_get_SPCFileName 57 sptr #comfunc global ICEnroll_put_SPCFileName 58 wstr #comfunc global ICEnroll_get_PVKFileName 59 sptr #comfunc global ICEnroll_put_PVKFileName 60 wstr #comfunc global ICEnroll_get_HashAlgorithm 61 sptr #comfunc global ICEnroll_put_HashAlgorithm 62 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。