PFN_CERT_DLL_OPEN_STORE_PROV_FUNC コールバック関数 (wincrypt.h)
CertDllOpenStoreProv 関数はストア プロバイダーによって実装され、ストアを開くために使用されます。 この関数は、 CertOpenStore 関数によって呼び出されます。
構文
PFN_CERT_DLL_OPEN_STORE_PROV_FUNC PfnCertDllOpenStoreProvFunc;
BOOL PfnCertDllOpenStoreProvFunc(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara,
[in] HCERTSTORE hCertStore,
[in, out] PCERT_STORE_PROV_INFO pStoreProvInfo
)
{...}
パラメーター
[in] lpszStoreProvider
ストア プロバイダーの種類を含む null で終わる ANSI 文字列へのポインター。
次の値は、定義済みのストアの種類を表します。 ストア プロバイダーの種類によって、 pvPara パラメーターの内容と、 dwFlags パラメーターの高い単語の使用と意味が決まります。 追加のストア プロバイダーは、 CryptInstallOIDFunctionAddress または CryptRegisterOIDFunction 関数を使用してインストールまたは登録できます。 ストア プロバイダーの追加の詳細については、「 CertOpenStore 機能の拡張」を参照してください。
プロバイダー識別子 | 説明 | pvPara コンテンツ |
---|---|---|
CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY |
キャッシュされたメモリに証明書ストアを作成します。 証明書、 証明書失効リスト (CRL)、または 証明書信頼リスト (CCTL) は、最初はストアに読み込まれません。 通常、一時ストアを作成するために使用されます。
証明書、CRL、または CCTL の追加、またはメモリ ストア内の証明書、CRL、または CCTL のプロパティの変更は、自動的には保存されません。 CertSaveStore を使用して、ファイルまたはメモリ BLOB に保存できます。 |
使用されていません。 |
CERT_STORE_PROV_FILE |
指定した開いているファイルから読み取られた証明書、CRL、および CCTL を使用してストアを初期化します。 このプロバイダーは、PKCS #7 署名付きメッセージまたは単一のエンコードされた証明書ではなく、シリアル化されたストアのみを含むファイルを想定しています。
ファイル ポインターは、シリアル化されたストア情報の先頭に配置する必要があります。 シリアル化されたストア内のデータが証明書ストアに読み込まれた後、ファイル ポインターは、ファイル内のシリアル化されたストア データに従うことができるすべてのデータの先頭に配置されます。 dwFlags でCERT_FILE_STORE_COMMIT_ENABLEが設定されている場合、ファイル ハンドルは複製され、ストアは常にシリアル化されたストアとしてコミットされます。 ストアを閉じると、ファイルは閉じられません。 |
CreateFile で開かれたファイルのハンドルへのポインター。 |
CERT_STORE_PROV_FILENAME_A |
ファイルから証明書、CRL、および CCTL を使用してストアを初期化します。 プロバイダーはファイルを開き、最初にシリアル化されたストアとしてファイルを読み取り、次に PKCS #7 署名付きメッセージとして読み取り、最後に 1 つのエンコードされた証明書として読み取ろうとします。
dwEncodingType パラメーターには、メッセージと証明書の両方で使用するエンコードの種類を含める必要があります。 ファイルに X.509 でエンコードされた証明書が含まれている場合、開いている操作は GetLastError で失敗し、ERROR_ACCESS_DENIEDを返します。 CERT_FILE_STORE_COMMIT_ENABLE フラグが dwFlags で設定されている場合、CreateFile に渡される dwCreationDisposition 値は次のようになります。
dwFlags にCERT_FILE_STORE_COMMIT_ENABLEが含まれている場合、ファイルは、開かれたファイルの種類に応じて PKCS #7 またはシリアル化されたストアとしてコミットされます。 ファイルが空の場合、またはファイル名に拡張子が .p7c または .spc である場合、ファイルは PKCS #7 としてコミットされます。 それ以外の場合、ファイルはシリアル化されたストアとしてコミットされます。 |
開かれていない既存のファイルの名前を含む null で終わる ANSI 文字列へのポインター。 |
CERT_STORE_PROV_FILENAME
CERT_STORE_PROV_FILENAME_W sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W |
CERT_STORE_PROV_FILENAME_Aと同じです。 | 開かれていない既存のファイルの名前を含む null で終わる Unicode 文字列へのポインター。 |
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION |
他のストアのコレクションとなるストアを開きます。 ストアは、 CertAddStoreToCollection と CertRemoveStoreFromCollection を使用してコレクションに追加または削除 されます。 ストアがコレクションに追加されると、そのストア内のすべての証明書、CRL、および CCTL がコレクション ストアの検索または列挙に使用できるようになります。
dwFlags の上位ワードは 0 に設定されます。 |
NULL にする必要があります。 |
CERT_STORE_PROV_REG |
レジストリ サブキーから証明書、CRL、および CCTL を使用してストアを初期化します。
このプロバイダーは、pvPara で渡されたキーの下に、レジストリ サブキー証明書、CRL、および CCTL を開くか作成します。 入力キーはプロバイダーによって閉じられません。 返す前に、プロバイダーは pvPara で渡されたキーの独自のコピーを開きます。 CERT_STORE_READONLY_FLAGが dwFlags という低い単語で設定されている場合、レジストリ サブキーは、KEY_READ_ACCESSで RegOpenKey を使用して開かれます。 それ以外の場合、レジストリ サブキーは、KEY_ALL_ACCESSで RegCreateKey を 使用して作成されます。 開いているストアの内容に対する変更は、直ちにレジストリに保持されます。 ただし、 CERT_STORE_READONLY_FLAGが dwFlags の低い単語で設定されている場合、ストアの内容にを追加したり、コンテキストのプロパティを変更しようとすると、 GetLastError がE_ACCESSDENIEDコードを返すというエラーが発生します。 |
開いているレジストリ キーのハンドル。 |
CERT_STORE_PROV_SYSTEM_A |
指定したシステム ストアの証明書、CRL、および CCTL を使用してストアを初期化します。
システム ストアは、1 つ以上の物理ストアで構成される論理コレクション ストアです。 システム ストアに関連付けられている物理ストアは、 CertRegisterPhysicalStore 関数に登録されます。 システム ストアを開いた後、それに関連付けられているすべての物理ストアも CertOpenStore の呼び出しによって開き、 CertAddStoreToCollection 関数を使用してシステム ストア コレクションに追加されます。 dwFlags の高い単語は、システム ストアの場所を示し、通常は CERT_SYSTEM_STORE_CURRENT_USER に設定されます。 レジストリの場所の詳細については、このトピックの「 dwFlags 」および 「System Store の場所」を参照してください。 一部のシステム ストアの場所はリモートで開くことができます。詳細については、「システム ストアの場所」を参照してください。 |
"My" や "Root" などのシステム ストア名を含む null で終わる ANSI 文字列へのポインター。 |
CERT_STORE_PROV_SYSTEM
CERT_STORE_PROV_SYSTEM_W sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W |
CERT_STORE_PROV_SYSTEM_Aと同じです。 | "My" や "Root" などのシステム ストア名を含む null で終わる Unicode 文字列へのポインター。 |
CERT_STORE_PROV_SYSTEM_REGISTRY_A |
物理レジストリ ストアの証明書、CRL、および CCTL を使用してストアを初期化します。 物理ストアはコレクション ストアとして開かれていません。 列挙と検索は、その 1 つの物理ストア内の証明書、CRL、および CCTL のみを通過します。
dwFlags の高い単語は、システム ストアの場所を示し、通常は CERT_SYSTEM_STORE_CURRENT_USER に設定されます。 詳細については、このトピックの「 dwFlags 」を参照してください。 一部のシステム ストアの場所はリモートで開くことができます。詳細については、「 システム ストアの場所」を参照してください。 |
"My" や "Root" などのシステム ストア名を含む null で終わる ANSI 文字列へのポインター。 |
CERT_STORE_PROV_SYSTEM_REGISTRY
CERT_STORE_PROV_SYSTEM_REGISTRY_W sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W |
CERT_STORE_PROV_SYSTEM_REGISTRY_Aと同じです。 | "My" や "Root" などのシステム ストア名を含む null で終わる Unicode 文字列へのポインター。 |
CERT_STORE_PROV_PHYSICAL
CERT_STORE_PROV_PHYSICAL_W sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W |
論理システム ストアのメンバーである指定された物理ストアの証明書、CRL、および CCTL を使用してストアを初期化します。
2 つの名前は、"Root.LocalMachine" などの円記号 (\) で区切ります。 ここで、"Root" はシステム ストアと " の名前です。LocalMachine" は物理ストアの名前です。 システム名と物理ストア名に円記号を含めることはできません。 dwFlags の高い単語は、システム ストアの場所 (通常はCERT_SYSTEM_STORE_CURRENT_USER) を示します。 詳細については、このトピックの「 dwFlags 」を参照してください。 一部の物理ストアの場所は、リモートで開くことができます。 |
システム ストア名と物理名の両方を含む null で終わる Unicode 文字列へのポインター。 |
CERT_STORE_PROV_MSG | 指定した暗号化メッセージの証明書、CRL、および CCTL を使用してストアを初期化します。 dwEncodingType パラメーターには、メッセージと証明書の両方で使用されるエンコードの種類を含める必要があります。 | CryptMsgOpenToDecode の呼び出しによって返される、エンコードされたメッセージの HCRYPTMSG ハンドル。 |
CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7 |
エンコードされた PKCS #7 署名付きメッセージから証明書、CRL、および CCTL を使用してストアを初期化します。 dwEncodingType パラメーターは、メッセージと証明書の両方で使用するエンコードの種類を指定する必要があります。 | エンコードされたメッセージを表す CRYPT_DATA_BLOB 構造体へのポインター。 |
CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED |
シリアル化されたストアを含むメモリの場所から、証明書、CRL、および CCTL を使用してストアを初期化します。 | シリアル化されたメモリ BLOB を含む CRYPT_DATA_BLOB 構造体へのポインター。 |
CERT_STORE_PROV_LDAP
CERT_STORE_PROV_LDAP_W sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W |
LDAP クエリの結果から証明書、CRL、および CCTL を使用してストアを初期化します。
ストアに対して書き込み操作を実行するには、クエリ文字列で、フィルターのない BASE クエリと 1 つの属性を指定する必要があります。 |
dwFlags パラメーターに CERT_LDAP_STORE_OPENED_FLAG フラグが含まれている場合、これは、使用する確立された LDAP セッションを指定するCERT_LDAP_STORE_OPENED_PARA構造体のアドレスです。
それ以外の場合、これは、LDAP クエリ文字列を含む null で終わる Unicode 文字列へのポインターです。 LDAP クエリ文字列の詳細については、「 LDAP 言語」を参照してください。 |
CERT_STORE_PROV_SMART_CARD
CERT_STORE_PROV_SMART_CARD_W sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W |
現在は使用しません。 |
[in] dwEncodingType
証明書のエンコードの種類とメッセージ エンコードの種類を指定します。 エンコードは、 CertSaveStore 関数の dwSaveAs パラメーターに CERT_STORE_SAVE_AS_PKCS7が含まれている場合にのみ使用されます。 それ以外の場合、 dwEncodingType パラメーターは使用されません。
このパラメーターは、lpszStoreProvider パラメーターでプロバイダーの種類CERT_STORE_PROV_MSG、CERT_STORE_PROV_PKCS7、またはCERT_STORE_PROV_FILENAMEが指定されている場合にのみ適用されます。 他のすべてのプロバイダーの種類では、このパラメーターは使用されず、0 に設定する必要があります。
このパラメーターには、次の値の 1 つ以上の組み合わせを指定できます。
値 | 意味 |
---|---|
|
PKCS #7 メッセージ エンコーディングを指定します。 |
|
X.509 証明書のエンコードを指定します。 |
[in] hCryptProv
暗号化プロバイダーへのハンドル。 このパラメーターは、NULL でもかまいません。
[in] dwFlags
これらの値は、ビットごとの OR 演算を使用して組み合わされた高ワード値と低ワード値で構成されます。
dwFlags のローワード部分は、開かれた証明書ストアのさまざまな一般的な特性を制御します。 この部分は、すべてのストア プロバイダーの種類で使用できます。 dwFlags のローワード部分には、次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
新しいストアが存在しない場合は作成します。 ストアが既に存在する場合、この関数は失敗します。
CERT_STORE_OPEN_EXISTING_FLAGもCERT_STORE_CREATE_NEW_FLAGも設定されていない場合は、既存のストアを開くか、ストアがまだ存在しない場合は、ストアを作成して開きます。 |
|
ストアから取得したすべての証明書、CRL、または CCTL が使用されなくなるまで、ストアのプロバイダーの終了を延期します。 ストアから取得した最後の証明書、CRL、または CTL が解放されると、ストアは実際に閉じられます。 これらの証明書、CRL、および CCTL のプロパティに加えられた変更は、この関数の呼び出し後も保持する必要があります。
このフラグが設定されておらず、ストアから取得した証明書、CRL、または CCTL が引き続き使用されている場合は、それらの証明書、CRL、および CCTL のプロパティに対する変更を永続化しないでください。 この関数が CERT_CLOSE_STORE_FORCE_FLAG で呼び出される場合、 CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG は無視する必要があります。 このフラグが設定され、NULL 以外の HCRYPTPROV 値が渡された場合、そのプロバイダーは、この関数の呼び出し後も引き続き使用されます。 |
|
ストアは開かれるのではなく削除されます。 この関数は、削除の成功と失敗の両方について FALSE を 返します。 削除が成功したことを示すには、 SetLastError を 0 で呼び出します。 削除の失敗を示すには、適切なエラー コードを指定して SetLastError を呼び出します。 |
|
通常、ストア内のすべての証明書の列挙では、 CERT_ARCHIVED_PROP_ID プロパティが設定されている証明書は無視されます。 このフラグが設定されている場合、ストア内の証明書の列挙には、 CERT_ARCHIVED_PROP_ID プロパティを持つ証明書を含め、ストア内のすべての証明書が含まれます。 |
|
許可されているアクセス許可の最大セットを使用してストアを開きます。 このフラグが指定されている場合、レジストリ ストアは最初に書き込みアクセス権で開き、失敗した場合は読み取り専用アクセスで再度開かれます。 |
|
hCryptProv パラメーターが NULL の場合、このフラグは使用されません。 このフラグは、NULL 以外の CSP ハンドルが hCryptProv パラメーターとして渡される場合にのみ有効です。 このフラグを設定すると、証明書ストアが閉じられたときに既定以外の CSP が自動的にリリースされるのを防ぐことができます。 |
|
既存のストアのみを開きます。 ストアが存在しない場合、関数は失敗します。 |
|
ストアを読み取り専用モードで開きます。 ストアの内容を変更しようとすると、エラーが発生します。 このフラグが設定され、レジストリ ベースのストア プロバイダーが使用されている場合、レジストリ サブキーは、KEY_READ_ACCESSで RegOpenKey を使用して開かれます。 それ以外の場合、レジストリ サブキーは、 regCreateKey と KEY_ALL_ACCESSを使用して作成されます。 |
|
このフラグがサポートされている場合、プロバイダーはストアの CERT_STORE_LOCALIZED_NAME_PROP_ID プロパティを設定します。 ローカライズされた名前を取得するには、dwPropID を CERT_STORE_LOCALIZED_NAME_PROP_ID に設定して CertGetStoreProperty 関数を呼び出します。 このフラグは、CERT_STORE_PROV_FILENAME、CERT_STORE_PROV_SYSTEM、CERT_STORE_PROV_SYSTEM_REGISTRY、CERT_STORE_PROV_PHYSICAL_Wの種類のプロバイダーでサポートされています。 |
|
ストアを複数回開くときに、このフラグを設定すると、ストアの開いているインスタンス全体で、証明書、CRL、または CTL コンテキストのエンコードされた部分のメモリを再利用することで、効率的なメモリ使用を確保できます。 |
|
キー識別子のListsは、CurrentUser と LocalMachine 内に存在します。 これらのキー識別子には、証明書のプロパティとよく似たプロパティがあります。 CERT_STORE_UPDATE_KEYID_FLAGが設定されている場合、CERT_KEY_PROV_INFO_PROP_ID プロパティを持つストアの場所のすべてのキー識別子について、そのプロパティはキー識別子プロパティ CERT_KEY_PROV_INFO_PROP_IDまたはそのキー識別子に関連する証明書のCERT_KEY_IDENTIFIER_PROP_IDから自動的に更新されます。 |
|
スレッドのSE_BACKUP_NAMEとSE_RESTORE_NAME 特権 を使用して、レジストリまたはファイル ベースのシステム ストアを開きます。 スレッドにこれらの特権がない場合、この関数はアクセス拒否エラーで失敗する必要があります。 |
CERT_STORE_PROV_SYSTEM、CERT_STORE_PROV_SYSTEM_REGISTRY、およびCERT_STORE_PROV_PHYSICALプロバイダーの種類では、次の dwFlags の高い単語を使用して、システム ストア レジストリの場所を指定します。
CERT_SYSTEM_STORE_CURRENT_SERVICE
CERT_SYSTEM_STORE_CURRENT_USER
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
CERT_SYSTEM_STORE_SERVICES
CERT_SYSTEM_STORE_USERS
既定では、システム ストアの場所は、 定義済みのレジストリ キー HKEY_CURRENT_USER、 HKEY_LOCAL_MACHINE、または HKEY_USERS 相対的に開かれます。 詳細については、「 システム ストアの場所」を参照してください。
次の高ワード フラグは、この既定の動作をオーバーライドします。
値 | 意味 |
---|---|
|
設定する場合、 pvPara には文字列ではなく CERT_SYSTEM_STORE_RELOCATE_PARA 構造体へのポインターを含める必要があります。 構造体は、ストアの名前とレジストリ内の場所の両方を示します。 |
|
既定では、CurrentUser "Root" ストアが開かれると、保護されたルート リストにない SystemRegistry ルートはすべて、この関数が返される前にキャッシュから削除されます。 このフラグを設定すると、この既定値がオーバーライドされ、SystemRegistry 内のすべてのルートが返され、保護されたルート リストのチェックは作成されません。 |
CERT_STORE_PROV_REGISTRY プロバイダーは、次の高ワード フラグを使用します。
値 | 意味 |
---|---|
|
CERT_STORE_PROV_REG プロバイダーは、既定の保存操作を実行する代わりに、証明書、CRL、および CCTL を 1 つのシリアル化されたストア サブキーに保存します。 既定では、各証明書、CRL、または CTL は、適切なサブキーの下に個別のレジストリ サブキーとして保存されます。
このフラグは、主に CurrentUserGroupPolicy ストアや LocalMachineGroupPolicy ストアなど、グループ ポリシー テンプレート (GPT) からダウンロードされたストアに使用されます。 CERT_REGISTRY_STORE_SERIALIZED_FLAGが設定されている場合、ストアの追加、削除、またはプロパティの変更は、CERT_STORE_CTRL_COMMITを使用して CertCloseStore または CertControlStore を呼び出すまで保持されません。 |
|
pvPara には、リモート コンピューター上のレジストリ キーへのハンドルが含まれています。 リモート コンピューターのレジストリ キーにアクセスするには、リモート コンピューターのセキュリティアクセス許可を設定してアクセスを許可する必要があります。 詳細については、「解説」を参照してください。 |
CERT_STORE_PROV_FILEおよびCERT_STORE_PROV_FILENAME プロバイダーの種類では、次の高ワード フラグが使用されます。
値 | 意味 |
---|---|
|
このフラグを設定すると、ストアへの追加、または CertCloseStore が呼び出されたとき、または CertControlStore が CERT_STORE_CONTROL_COMMIT で呼び出されたときに、ストア内のコンテキストのプロパティに加えられた変更がファイル ストアにコミットされます。
dwFlags でCERT_FILE_STORE_COMMIT_ENABLEとCERT_STORE_READONLY_FLAGの両方が設定されている場合、CertOpenStore は E_INVALIDARG で失敗します。 |
CERT_STORE_PROV_LDAP プロバイダーの種類では、次の高ワード フラグが使用されます。
値 | 意味 |
---|---|
|
一部のアプリケーションで必要な整合性を提供するには、Kerberos 認証プロトコルを使用して、LDAP サーバーとの間のすべての LDAP トラフィックにデジタル署名します。 |
|
既存の LDAP セッションを使用するには、このフラグを使用します。 このフラグを指定すると、 pvPara パラメーターは、使用する LDAP セッションに関する情報を含む CERT_LDAP_STORE_OPENED_PARA 構造体のアドレスです。 |
|
pvPara パラメーターで という名前の URL に対して A レコードのみの DNS 参照を実行します。 これにより、URL ホスト名を解決するときに、偽の DNS クエリが生成されるのを防ぐことができます。 pvPara パラメーターのドメイン名ではなく、ホスト名を渡す場合は、このフラグを使用します。 |
|
ストアが閉じられたときに LDAP セッションがバインド解除されるようにするには、このフラグを CERT_LDAP_STORE_OPENED_FLAG フラグと共に使用します。 ストアが閉じられると、 システムは ldap_unbind 関数を使用して LDAP セッションのバインドを解除します。 |
[in] pvPara
この関数の追加情報を含めることができる 32 ビット値。 このパラメーターの内容は、 lpszStoreProvider およびその他のパラメーターの値によって異なります。
[in] hCertStore
開かれたメモリ内のストアのハンドル。 CertAddSerializedElementToStore など、ストア関連の他の API 呼び出しを呼び出すために使用できます。
[in, out] pStoreProvInfo
更新する CERT_STORE_PROV_INFO 構造体へのポインター。 データ構造がゼロになり、 cbSize が呼び出しの前に設定されています。
CERT_STORE_PROV_INFO構造体の cStoreProvFunc メンバーは、実装され、最後に設定する必要があるコールバック関数の数です。 cStoreProvFunc が設定されると、CertAddEncodedCertificateToStore などの後続のすべてのストア呼び出しで、適切なプロバイダー コールバック関数が呼び出されます。
戻り値
成功した場合は TRUE。それ以外の場合は FALSE。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | wincrypt.h |