ICspInformation
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
暗号化プロバイダーに関する一般的な情報へのアクセスを提供します。
メソッド 17
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
プロバイダー名を含む文字列からオブジェクトを初期化します。
| strName | LPWSTR | in | 名前を含む BSTR 変数。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromName メソッドは、指定された名前のプロバイダーを開き、それに問い合わせて ICspInformation オブジェクトに次のプロパティ値を設定します。
- CspAlgorithms
- HasHardwareRandomNumberGenerator
- IsHardwareDevice
- IsRemovable
- IsSmartCard
- IsSoftwareDevice
- KeySpec
- LegacyCsp
- MaxKeyContainerNameLength
- Name
- Type
- Valid
- Version
このメソッドは、利用可能なアルゴリズムを CspAlgorithms プロパティが返す ICspAlgorithms コレクションに追加します。プロバイダーの種類からオブジェクトを初期化するには、InitializeFromType メソッドを呼び出します。
既定の暗号化プロバイダーからオブジェクトを初期化します。
| Type | X509ProviderType | in | プロバイダーの種類を定義する X509ProviderType 列挙値。
|
| pAlgorithm | IObjectId* | inoptional | アルゴリズム OID を表す IObjectId インターフェイスへのポインター。このパラメーターは省略可能で、NULL を指定できます。詳細については、Type パラメーターを参照してください。 |
| MachineContext | VARIANT_BOOL | in | 指定したプロバイダーの種類の既定のプロバイダーを決定するために、コンピューターとユーザーのどちらのコンテキストを使用するかを示す VARIANT_BOOL 変数。コンピューターの場合は VARIANT_TRUE を、ユーザーの場合は VARIANT_FALSE を指定します。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromType メソッドは、指定された種類を検証して Type プロパティに保存し、既定のプロバイダーを取得して、ICspInformation オブジェクトに次のプロパティ値を設定します。
- CspAlgorithms
- HasHardwareRandomNumberGenerator
- IsHardwareDevice
- IsRemovable
- IsSmartCard
- IsSoftwareDevice
- KeySpec
- LegacyCsp
- MaxKeyContainerNameLength
- Name
- Valid
- Version
このメソッドは、利用可能なアルゴリズムを CspAlgorithms プロパティが返す ICspAlgorithms コレクションに追加します。CSP 名からオブジェクトを初期化するには、InitializeFromName メソッドを呼び出します。
プロバイダーがサポートするアルゴリズムに関する情報を含む ICspAlgorithm インターフェイスのコレクションを取得します。
| ppValue | ICspAlgorithms** | out | この CSP がサポートするアルゴリズムのコレクションを受け取るインターフェイスポインタへのポインタである。 |
解説(Remarks)
ICspAlgorithm オブジェクトには、プロバイダーがサポートする暗号化アルゴリズムに関する情報が含まれます。これには、アルゴリズムの オブジェクト識別子 (OID)、許可されるキーの長さおよび増分長、アルゴリズム名と略称、そしてアルゴリズム OID オブジェクトが有効かどうかを示すブール値が含まれます。
暗号化操作用のランダム バイトを生成するために使用できるハードウェア乱数ジェネレーターをプロバイダーがサポートするかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | ハードウェア乱数生成器を備えているかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
現在、この機能をサポートする Microsoft の暗号化プロバイダーはありません。
プロバイダーがハードウェア デバイスに実装されているかどうかを判断するブール値を取得します。
| pValue | VARIANT_BOOL* | out | ハードウェアデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
このプロパティは、プロバイダーがハードウェアに実装されているかどうかのみを示します。プロバイダーはハードウェアとソフトウェアの両方に実装できるため、このプロパティが true であってもソフトウェア コンポーネントが存在しないとは限りません。IsSoftwareDevice プロパティも確認する必要があります。次のプロバイダーは IsHardwareDevice プロパティに true を返します。
- Microsoft Smart Card Key Storage Provider
- Microsoft Base Smart Card Crypto Provider
これらのプロバイダーはいずれも IsSoftwareDevice プロパティにも true を返します。証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、そのプロバイダーをスマート カード プロバイダーとみなします。
キーを含むトークンを取り外せるかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | リムーバブルデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
オペレーター カードやスマート カードは、キーを含めることができる取り外し可能なトークンの例です。たとえば、次のプロバイダーはこのプロパティ値に true を返します。
- Microsoft Smart Card Key Storage Provider
- Microsoft Base Smart Card Crypto Provider
証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、そのプロバイダーをスマート カード プロバイダーとみなします。
プロバイダーがソフトウェアに実装されているかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | ソフトウェアデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
このプロパティは、プロバイダーがソフトウェアに実装されているかどうかのみを示します。プロバイダーはハードウェアとソフトウェアの両方に実装できるため、IsSoftwareDevice プロパティが true であってもハードウェア コンポーネントが存在しないとは限りません。IsHardwareDevice プロパティも確認する必要があります。次の Microsoft プロバイダーは IsSoftwareDevice プロパティに true を返します。
- Microsoft Software Key Storage Provider
- Microsoft Smart Card Key Storage Provider
- Microsoft Base Cryptographic Provider v1.0
- Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
- Microsoft Base DSS Cryptographic Provider
- Microsoft Base Smart Card Crypto Provider
- Microsoft DH Schannel Cryptographic Provider
- Microsoft Enhanced Cryptographic Provider v1.0
- Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
- Microsoft Enhanced RSA and AES Cryptographic Provider
- Microsoft RSA Schannel Cryptographic Provider
- Microsoft Strong Cryptographic Provider
Microsoft Smart Card Key Storage Provider と Microsoft Base Smart Card Crypto Provider は、IsHardwareDevice プロパティにも true を返します。証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、スマート カード プロバイダーとみなします。
プロバイダーがクライアント コンピューターにインストールされているかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | この CSP が有効かどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
Valid プロパティは通常、テンプレート ベースの証明書要求で指定されたプロバイダーの一覧を処理するときに、Certificate Enrollment Control によって設定されます。テンプレートに記載されているプロバイダーがクライアントにインストールされていない場合、コントロールは ICspInformation オブジェクトを作成し、このプロパティの値を false に設定します。このプロパティ値は、プロバイダーが利用可能かどうかを示すためにユーザー インターフェイスで使用できます。プロバイダーがインストールされていない場合、意味のある情報を提供するのは Valid プロパティと Name プロパティのみです。
プロバイダーに関連付けられた秘密キー コンテナーの名前でサポートされる最大の長さを取得します。
| pValue | INT* | out | 鍵コンテナー名の最大長を受け取る INT へのポインタである。 |
解説(Remarks)
キー コンテナー名は、IX509PrivateKey インターフェイスの ContainerName プロパティを呼び出すことで指定および取得できます。Microsoft が配布するプロバイダーに関連付けられた値を次の表に示します。これらのプロバイダーの一部はすべてのオペレーティング システムに含まれているとは限らず、代わりに別のものが含まれている場合があります。
| プロバイダー | MaxKeyContainerNameLength 値 |
|---|---|
| Microsoft Software Key Storage Provider | 261 |
| Microsoft Smart Card Key Storage Provider | 40 |
| Microsoft Base Cryptographic Provider v1.0 | 261 |
| Microsoft Base DSS and Diffie-Hellman Cryptographic Provider | 261 |
| Microsoft Base DSS Cryptographic Provider | 261 |
| Microsoft Base Smart Card Crypto Provider | 40 |
| Microsoft DH Schannel Cryptographic Provider | 261 |
| Microsoft Enhanced Cryptographic Provider v1.0 | 261 |
| Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider | 261 |
| Microsoft Enhanced RSA and AES Cryptographic Provider | 261 |
| Microsoft RSA Schannel Cryptographic Provider | 261 |
| Microsoft Strong Cryptographic Provider | 261 |
名前を取得します。
| pValue | LPWSTR* | out | CSP の名前を受け取る文字列ポインタである。 |
解説(Remarks)
次の一覧は、Windows Vista 以降にインストールされる Microsoft プロバイダーの一部の名前を示しています。この一覧はすべてを網羅したものではありません。
- Microsoft Software Key Storage Provider
- Microsoft Smart Card Key Storage Provider
- Microsoft Base Cryptographic Provider v1.0
- Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
- Microsoft Base DSS Cryptographic Provider
- Microsoft Base Smart Card Crypto Provider
- Microsoft DH Schannel Cryptographic Provider
- Microsoft Enhanced Cryptographic Provider v1.0
- Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
- Microsoft Enhanced RSA and AES Cryptographic Provider
- Microsoft RSA Schannel Cryptographic Provider
- Microsoft Strong Cryptographic Provider
プロバイダーの種類を取得します。
| pValue | X509ProviderType* | out | プロバイダーの種類を受け取る X509ProviderType へのポインタである。 |
解説(Remarks)
Microsoft が配布するプロバイダーに関連付けられた値を次の表に示します。これらのプロバイダーの一部はすべてのオペレーティング システムに含まれているとは限らず、代わりに別のものが含まれている場合があります。
| プロバイダー | Type 値 |
|---|---|
| Microsoft Software Key Storage Provider | XCN_PROV_NONE (0) |
| Microsoft Smart Card Key Storage Provider | XCN_PROV_NONE (0) |
| Microsoft Base Cryptographic Provider v1.0 | XCN_PROV_RSA_FULL (1) |
| Microsoft Base DSS and Diffie-Hellman Cryptographic Provider | XCN_PROV_DSS_DH (13) |
| Microsoft Base DSS Cryptographic Provider | XCN_PROV_DSS (3) |
| Microsoft Base Smart Card Crypto Provider | XCN_PROV_RSA_FULL (1) |
| Microsoft DH Schannel Cryptographic Provider | XCN_PROV_DH_SCHANNEL (18) |
| Microsoft Enhanced Cryptographic Provider v1.0 | XCN_PROV_RSA_FULL (1) |
| Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider | XCN_PROV_DSS_DH (13) |
| Microsoft Enhanced RSA and AES Cryptographic Provider | XCN_PROV_RSA_AES (24) |
| Microsoft RSA Schannel Cryptographic Provider | XCN_PROV_RSA_SCHANNEL (12) |
| Microsoft Strong Cryptographic Provider | CN_PROV_RSA_FULL (1) |
プロバイダーのバージョン番号を取得します。
| pValue | INT* | out | CSP のバージョンを受け取る INT へのポインタである。 |
プロバイダーがサポートするアルゴリズムの用途を示す値を取得します。
| pValue | X509KeySpec* | out | 鍵指定 (KeySpec) を受け取る X509KeySpec へのポインタである。 |
解説(Remarks)
取得される値は 0、1、2、または 3 です。値が 0 (XCN_AT_NONE) の場合、そのプロバイダーは Cryptography API: Next Generation (CNG) プロバイダーです。Microsoft が配布するプロバイダーに関連付けられた値を次の表に示します。これらのプロバイダーの一部はすべてのオペレーティング システムに含まれているとは限らず、代わりに別のものが含まれている場合があります。
| プロバイダー | KeySpec 値 |
|---|---|
| Microsoft Software Key Storage Provider | 0 |
| Microsoft Smart Card Key Storage Provider | 0 |
| Microsoft Base Cryptographic Provider v1.0 | 3 |
| Microsoft Base DSS and Diffie-Hellman Cryptographic Provider | 3 |
| Microsoft Base DSS Cryptographic Provider | 2 |
| Microsoft Base Smart Card Crypto Provider | 3 |
| Microsoft DH Schannel Cryptographic Provider | 3 |
| Microsoft Enhanced Cryptographic Provider v1.0 | 3 |
| Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider | 3 |
| Microsoft Enhanced RSA and AES Cryptographic Provider | 3 |
| Microsoft RSA Schannel Cryptographic Provider | 1 |
| Microsoft Strong Cryptographic Provider | 3 |
プロバイダーがスマート カード プロバイダーかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | スマートカードかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
スマート カード プロバイダーは通常、IsHardwareDevice プロパティと IsSoftwareDevice プロパティが設定されているか、IsRemovable プロパティが設定されていることで識別されます。
既定の秘密キー セキュリティ記述子を取得します。
| MachineContext | VARIANT_BOOL | in | コンピューターとユーザーのどちらのセキュリティ記述子を取得するかを示す VARIANT_BOOL 変数。コンピューターの場合は VARIANT_TRUE を、ユーザーの場合は VARIANT_FALSE を指定します。 |
| pValue | LPWSTR* | out | セキュリティ記述子を含む BSTR 変数へのポインター。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
| 戻り値/値 | 説明 |
|---|---|
| プロパティ値が見つかりませんでした。 | |
| 暗号化プロバイダーはセキュリティ記述子をサポートしていません。 | |
| 暗号化プロバイダーはセキュリティ記述子をサポートしていません。 | |
| 暗号化プロバイダーはセキュリティ記述子をサポートしていません。 |
解説(Remarks)
セキュリティ記述子を使用するには、Microsoft Authorization API に含まれる ConvertStringSecurityDescriptorToSecurityDescriptor 関数を呼び出し、GetDefaultSecurityDescriptor メソッドが返した文字列を指定する必要があります。この関数は SECURITY_DESCRIPTOR 構造体へのポインターを返します。
既定のセキュリティ記述子は、コンピューターとユーザーの秘密キーへのアクセスを次のように定義するために使用されます。
- 既定では、ローカル管理者と LocalSystem アカウントで実行されているサービスのみが、コンピューター アカウントに関連付けられた秘密キーにアクセスできます。
- プロバイダーがユーザーの秘密キーをユーザー プロファイル内の暗号化されたファイルに格納する場合、セキュリティ記述子を使用してそのファイルへのアクセス許可を設定します。
このメソッドは、新しい秘密キーが作成される場合に、指定された MachineContext パラメーターと現在のプロバイダーに関連付けられる既定のセキュリティ記述子を取得します。既定の記述子を使用してカスタム記述子を作成できます。カスタム記述子は通常、コンピューター コンテキストの証明書に関連付けられた秘密キーを、LocalSystem アカウント以外のアカウントで実行されているサービスが使用する必要がある場合に作成されます。
一部の暗号化プロバイダーはセキュリティ記述子をサポートしていません。例として、スマート カード プロバイダーやハードウェア セキュリティ モジュール (HSM) プロバイダーが挙げられます。
プロバイダーが Cryptography API: Next Generation (CNG) プロバイダーか、CryptoAPI (レガシー) CSP かを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | レガシー CSP (CAPI) かどうかを受け取る VARIANT_BOOL へのポインタである。 |
指定された署名、暗号化、ハッシュ、または暗号操作と一致する、最初にサポートされるアルゴリズムに対する ICspStatus オブジェクトを作成します。
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。
| 戻り値/値 | 説明 |
|---|---|
| ICspStatus オブジェクトが見つかりませんでした。 | |
| ICspInformation オブジェクトが初期化されていません。 |
解説(Remarks)
ICspStatus オブジェクトには、暗号化プロバイダーに関するステータス情報が含まれます。各オブジェクトは、プロバイダーがサポートする特定のアルゴリズムに対して初期化されます。pAlgorithm パラメーターでアルゴリズムを指定しない場合、許可された操作と一致する最初にサポートされるアルゴリズムが選択され、ICspStatus オブジェクトが作成されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICspInformation "{728AB307-217D-11DA-B2A4-000E7BBB2B09}" #usecom global ICspInformation IID_ICspInformation "{}" #comfunc global ICspInformation_InitializeFromName 7 wstr #comfunc global ICspInformation_InitializeFromType 8 int,sptr,int #comfunc global ICspInformation_get_CspAlgorithms 9 sptr #comfunc global ICspInformation_get_HasHardwareRandomNumberGenerator 10 var #comfunc global ICspInformation_get_IsHardwareDevice 11 var #comfunc global ICspInformation_get_IsRemovable 12 var #comfunc global ICspInformation_get_IsSoftwareDevice 13 var #comfunc global ICspInformation_get_Valid 14 var #comfunc global ICspInformation_get_MaxKeyContainerNameLength 15 var #comfunc global ICspInformation_get_Name 16 var #comfunc global ICspInformation_get_Type 17 var #comfunc global ICspInformation_get_Version 18 var #comfunc global ICspInformation_get_KeySpec 19 var #comfunc global ICspInformation_get_IsSmartCard 20 var #comfunc global ICspInformation_GetDefaultSecurityDescriptor 21 int,var #comfunc global ICspInformation_get_LegacyCsp 22 var #comfunc global ICspInformation_GetCspStatusFromOperations 23 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICspInformation "{728AB307-217D-11DA-B2A4-000E7BBB2B09}" #usecom global ICspInformation IID_ICspInformation "{}" #comfunc global ICspInformation_InitializeFromName 7 wstr #comfunc global ICspInformation_InitializeFromType 8 int,sptr,int #comfunc global ICspInformation_get_CspAlgorithms 9 sptr #comfunc global ICspInformation_get_HasHardwareRandomNumberGenerator 10 sptr #comfunc global ICspInformation_get_IsHardwareDevice 11 sptr #comfunc global ICspInformation_get_IsRemovable 12 sptr #comfunc global ICspInformation_get_IsSoftwareDevice 13 sptr #comfunc global ICspInformation_get_Valid 14 sptr #comfunc global ICspInformation_get_MaxKeyContainerNameLength 15 sptr #comfunc global ICspInformation_get_Name 16 sptr #comfunc global ICspInformation_get_Type 17 sptr #comfunc global ICspInformation_get_Version 18 sptr #comfunc global ICspInformation_get_KeySpec 19 sptr #comfunc global ICspInformation_get_IsSmartCard 20 sptr #comfunc global ICspInformation_GetDefaultSecurityDescriptor 21 int,sptr #comfunc global ICspInformation_get_LegacyCsp 22 sptr #comfunc global ICspInformation_GetCspStatusFromOperations 23 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。