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

ICspInformation

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

公式ドキュメント

暗号化プロバイダーに関する一般的な情報へのアクセスを提供します。

メソッド 17

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

vtbl 7 HRESULT InitializeFromName(LPWSTR strName)

プロバイダー名を含む文字列からオブジェクトを初期化します。

strNameLPWSTRin名前を含む BSTR 変数。

戻り値

関数が成功した場合は S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
オブジェクトは既に初期化されています。

解説(Remarks)

InitializeFromName メソッドは、指定された名前のプロバイダーを開き、それに問い合わせて ICspInformation オブジェクトに次のプロパティ値を設定します。

このメソッドは、利用可能なアルゴリズムを CspAlgorithms プロパティが返す ICspAlgorithms コレクションに追加します。プロバイダーの種類からオブジェクトを初期化するには、InitializeFromType メソッドを呼び出します。

vtbl 8 HRESULT InitializeFromType(X509ProviderType Type, IObjectId* pAlgorithm, VARIANT_BOOL MachineContext)

既定の暗号化プロバイダーからオブジェクトを初期化します。

TypeX509ProviderTypein

プロバイダーの種類を定義する X509ProviderType 列挙値。

  • XCN_PROV_NONE を指定し、pAlgorithm パラメーターに NULL 以外の値を設定した場合、既定の Cryptography API: Next Generation (CNG) プロバイダーが使用されます。
  • XCN_PROV_NONE 以外の値を指定し、pAlgorithm パラメーターに NULL を設定した場合、既定のレガシー暗号化サービス プロバイダー (CSP) が使用されます。
pAlgorithmIObjectId*inoptionalアルゴリズム OID を表す IObjectId インターフェイスへのポインター。このパラメーターは省略可能で、NULL を指定できます。詳細については、Type パラメーターを参照してください。
MachineContextVARIANT_BOOLin指定したプロバイダーの種類の既定のプロバイダーを決定するために、コンピューターとユーザーのどちらのコンテキストを使用するかを示す VARIANT_BOOL 変数。コンピューターの場合は VARIANT_TRUE を、ユーザーの場合は VARIANT_FALSE を指定します。

戻り値

関数が成功した場合は S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
オブジェクトは既に初期化されています。

解説(Remarks)

InitializeFromType メソッドは、指定された種類を検証して Type プロパティに保存し、既定のプロバイダーを取得して、ICspInformation オブジェクトに次のプロパティ値を設定します。

このメソッドは、利用可能なアルゴリズムを CspAlgorithms プロパティが返す ICspAlgorithms コレクションに追加します。CSP 名からオブジェクトを初期化するには、InitializeFromName メソッドを呼び出します。

vtbl 9 HRESULT get_CspAlgorithms(ICspAlgorithms** ppValue)

プロバイダーがサポートするアルゴリズムに関する情報を含む ICspAlgorithm インターフェイスのコレクションを取得します。

ppValueICspAlgorithms**outこの CSP がサポートするアルゴリズムのコレクションを受け取るインターフェイスポインタへのポインタである。

解説(Remarks)

ICspAlgorithm オブジェクトには、プロバイダーがサポートする暗号化アルゴリズムに関する情報が含まれます。これには、アルゴリズムの オブジェクト識別子 (OID)、許可されるキーの長さおよび増分長、アルゴリズム名と略称、そしてアルゴリズム OID オブジェクトが有効かどうかを示すブール値が含まれます。

vtbl 10 HRESULT get_HasHardwareRandomNumberGenerator(VARIANT_BOOL* pValue)

暗号化操作用のランダム バイトを生成するために使用できるハードウェア乱数ジェネレーターをプロバイダーがサポートするかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*outハードウェア乱数生成器を備えているかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

現在、この機能をサポートする Microsoft の暗号化プロバイダーはありません。

vtbl 11 HRESULT get_IsHardwareDevice(VARIANT_BOOL* pValue)

プロバイダーがハードウェア デバイスに実装されているかどうかを判断するブール値を取得します。

pValueVARIANT_BOOL*outハードウェアデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

このプロパティは、プロバイダーがハードウェアに実装されているかどうかのみを示します。プロバイダーはハードウェアとソフトウェアの両方に実装できるため、このプロパティが true であってもソフトウェア コンポーネントが存在しないとは限りません。IsSoftwareDevice プロパティも確認する必要があります。次のプロバイダーは IsHardwareDevice プロパティに true を返します。

これらのプロバイダーはいずれも IsSoftwareDevice プロパティにも true を返します。証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、そのプロバイダーをスマート カード プロバイダーとみなします。

vtbl 12 HRESULT get_IsRemovable(VARIANT_BOOL* pValue)

キーを含むトークンを取り外せるかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*outリムーバブルデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

オペレーター カードやスマート カードは、キーを含めることができる取り外し可能なトークンの例です。たとえば、次のプロバイダーはこのプロパティ値に true を返します。

証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、そのプロバイダーをスマート カード プロバイダーとみなします。

vtbl 13 HRESULT get_IsSoftwareDevice(VARIANT_BOOL* pValue)

プロバイダーがソフトウェアに実装されているかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*outソフトウェアデバイスかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

このプロパティは、プロバイダーがソフトウェアに実装されているかどうかのみを示します。プロバイダーはハードウェアとソフトウェアの両方に実装できるため、IsSoftwareDevice プロパティが true であってもハードウェア コンポーネントが存在しないとは限りません。IsHardwareDevice プロパティも確認する必要があります。次の Microsoft プロバイダーは IsSoftwareDevice プロパティに true を返します。

Microsoft Smart Card Key Storage Provider と Microsoft Base Smart Card Crypto Provider は、IsHardwareDevice プロパティにも true を返します。証明書登録サービスは、IsHardwareDevice プロパティと IsSoftwareDevice プロパティの両方が設定されている場合、または IsRemovable プロパティが設定されている場合、スマート カード プロバイダーとみなします。

vtbl 14 HRESULT get_Valid(VARIANT_BOOL* pValue)

プロバイダーがクライアント コンピューターにインストールされているかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*outこの CSP が有効かどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

Valid プロパティは通常、テンプレート ベースの証明書要求で指定されたプロバイダーの一覧を処理するときに、Certificate Enrollment Control によって設定されます。テンプレートに記載されているプロバイダーがクライアントにインストールされていない場合、コントロールは ICspInformation オブジェクトを作成し、このプロパティの値を false に設定します。このプロパティ値は、プロバイダーが利用可能かどうかを示すためにユーザー インターフェイスで使用できます。プロバイダーがインストールされていない場合、意味のある情報を提供するのは Valid プロパティと Name プロパティのみです。

vtbl 15 HRESULT get_MaxKeyContainerNameLength(INT* pValue)

プロバイダーに関連付けられた秘密キー コンテナーの名前でサポートされる最大の長さを取得します。

pValueINT*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
vtbl 16 HRESULT get_Name(LPWSTR* pValue)

名前を取得します。

pValueLPWSTR*outCSP の名前を受け取る文字列ポインタである。

解説(Remarks)

次の一覧は、Windows Vista 以降にインストールされる Microsoft プロバイダーの一部の名前を示しています。この一覧はすべてを網羅したものではありません。

vtbl 17 HRESULT get_Type(X509ProviderType* pValue)

プロバイダーの種類を取得します。

pValueX509ProviderType*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)
vtbl 18 HRESULT get_Version(INT* pValue)

プロバイダーのバージョン番号を取得します。

pValueINT*outCSP のバージョンを受け取る INT へのポインタである。
vtbl 19 HRESULT get_KeySpec(X509KeySpec* pValue)

プロバイダーがサポートするアルゴリズムの用途を示す値を取得します。

pValueX509KeySpec*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
vtbl 20 HRESULT get_IsSmartCard(VARIANT_BOOL* pValue)

プロバイダーがスマート カード プロバイダーかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*outスマートカードかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

スマート カード プロバイダーは通常、IsHardwareDevice プロパティと IsSoftwareDevice プロパティが設定されているか、IsRemovable プロパティが設定されていることで識別されます。

vtbl 21 HRESULT GetDefaultSecurityDescriptor(VARIANT_BOOL MachineContext, LPWSTR* pValue)

既定の秘密キー セキュリティ記述子を取得します。

MachineContextVARIANT_BOOLinコンピューターとユーザーのどちらのセキュリティ記述子を取得するかを示す VARIANT_BOOL 変数。コンピューターの場合は VARIANT_TRUE を、ユーザーの場合は VARIANT_FALSE を指定します。
pValueLPWSTR*outセキュリティ記述子を含む BSTR 変数へのポインター。

戻り値

関数が成功した場合は S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

戻り値/値 説明
CERTSRV_E_PROPERTY_EMPTY
プロパティ値が見つかりませんでした。
NTE_BAD_TYPE
暗号化プロバイダーはセキュリティ記述子をサポートしていません。
NTE_NOT_FOUND
暗号化プロバイダーはセキュリティ記述子をサポートしていません。
NTE_BAD_KEY_STATE
暗号化プロバイダーはセキュリティ記述子をサポートしていません。

解説(Remarks)

セキュリティ記述子を使用するには、Microsoft Authorization API に含まれる ConvertStringSecurityDescriptorToSecurityDescriptor 関数を呼び出し、GetDefaultSecurityDescriptor メソッドが返した文字列を指定する必要があります。この関数は SECURITY_DESCRIPTOR 構造体へのポインターを返します。

既定のセキュリティ記述子は、コンピューターとユーザーの秘密キーへのアクセスを次のように定義するために使用されます。

このメソッドは、新しい秘密キーが作成される場合に、指定された MachineContext パラメーターと現在のプロバイダーに関連付けられる既定のセキュリティ記述子を取得します。既定の記述子を使用してカスタム記述子を作成できます。カスタム記述子は通常、コンピューター コンテキストの証明書に関連付けられた秘密キーを、LocalSystem アカウント以外のアカウントで実行されているサービスが使用する必要がある場合に作成されます。

一部の暗号化プロバイダーはセキュリティ記述子をサポートしていません。例として、スマート カード プロバイダーやハードウェア セキュリティ モジュール (HSM) プロバイダーが挙げられます。

vtbl 22 HRESULT get_LegacyCsp(VARIANT_BOOL* pValue)

プロバイダーが Cryptography API: Next Generation (CNG) プロバイダーか、CryptoAPI (レガシー) CSP かを示すブール値を取得します。

pValueVARIANT_BOOL*outレガシー CSP (CAPI) かどうかを受け取る VARIANT_BOOL へのポインタである。
vtbl 23 HRESULT GetCspStatusFromOperations(IObjectId* pAlgorithm, AlgorithmOperationFlags Operations, ICspStatus** ppValue)

指定された署名、暗号化、ハッシュ、または暗号操作と一致する、最初にサポートされるアルゴリズムに対する ICspStatus オブジェクトを作成します。

pAlgorithmIObjectId*inoptional

アルゴリズム OID を表す IObjectId インターフェイスへのポインター。このパラメーターは省略可能で、NULL を指定できます。

OperationsAlgorithmOperationFlagsin

取得するアルゴリズムの種類を識別する AlgorithmOperationFlags 列挙値。次のいずれかの値を指定する必要があります。

上記のフラグのいずれかを次のいずれかと組み合わせることで、検索特性を絞り込むことができます。

XCN_NCRYPT_PREFER_SIGNATURE_ONLY_OPERATION または XCN_NCRYPT_PREFER_NON_SIGNATURE_OPERATION の優先フラグを設定した場合、次のいずれも同時に指定することはできません。

ppValueICspStatus**outICspStatus インターフェイスへのポインターを受け取る変数のアドレス。

戻り値

関数が成功した場合は S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。想定される値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラー コードの一覧については、「Common HRESULT Values」を参照してください。

戻り値/値 説明
CERTSRV_E_PROPERTY_EMPTY
ICspStatus オブジェクトが見つかりませんでした。
OLE_E_BLANK
ICspInformation オブジェクトが初期化されていません。

解説(Remarks)

ICspStatus オブジェクトには、暗号化プロバイダーに関するステータス情報が含まれます。各オブジェクトは、プロバイダーがサポートする特定のアルゴリズムに対して初期化されます。pAlgorithm パラメーターでアルゴリズムを指定しない場合、許可された操作と一致する最初にサポートされるアルゴリズムが選択され、ICspStatus オブジェクトが作成されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 不要)。