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

PFN_CERT_DLL_OPEN_STORE_PROV_FUNC

コールバック

シグネチャ

BOOL PFN_CERT_DLL_OPEN_STORE_PROV_FUNC(
    LPSTR lpszStoreProvider,
    CERT_QUERY_ENCODING_TYPE dwEncodingType,
    HCRYPTPROV_LEGACY hCryptProv,
    CERT_OPEN_STORE_FLAGS dwFlags,
    void* pvPara,
    HCERTSTORE hCertStore,
    CERT_STORE_PROV_INFO* pStoreProvInfo
);

パラメーター

フィールド型説明
lpszStoreProviderLPSTR

ストアプロバイダーの種類を格納した、null で終わる ANSI 文字列へのポインターです。

次の値は、定義済みのストアの種類を表します。ストアプロバイダーの種類によって、pvPara パラメーターの内容と、dwFlags パラメーターの上位ワードの用途および意味が決まります。追加のストアプロバイダーは、 CryptInstallOIDFunctionAddress 関数または CryptRegisterOIDFunction 関数を使用してインストールまたは登録できます。ストアプロバイダーの追加について詳しくは、 Extending CertOpenStore Functionality を参照してください。

プロバイダー識別子 説明 pvPara の内容
CERT_STORE_PROV_MEMORY

sz_CERT_STORE_PROV_MEMORY

キャッシュされたメモリ内に証明書ストアを作成します。初期状態では、証明書、証明書失効リスト (CRL)、証明書信頼リスト (CTL) はストアに読み込まれません。通常は一時的なストアの作成に使用します。

メモリストアに対する証明書、CRL、CTL の追加や、証明書、CRL、CTL のプロパティの変更は自動的には保存されません。これらは CertSaveStore を使用して、ファイルまたはメモリ BLOB に保存できます。

使用しません。
CERT_STORE_PROV_FILE 指定された、開かれているファイルから読み取った証明書、CRL、CTL でストアを初期化します。このプロバイダーは、ファイルにシリアル化されたストアのみが含まれ、PKCS #7 署名付きメッセージや単一のエンコードされた証明書は含まれないことを前提とします。

ファイルポインターは、シリアル化されたストア情報の先頭に位置付けられている必要があります。シリアル化されたストア内のデータが証明書ストアに読み込まれた後、ファイルポインターは、ファイル内でシリアル化されたストアデータに続くデータの先頭に位置付けられます。dwFlags に CERT_FILE_STORE_COMMIT_ENABLE が設定されている場合、ファイルハンドルは複製され、ストアは常にシリアル化されたストアとしてコミットされます。ストアを閉じてもファイルは閉じられません。

CreateFile で開かれたファイルのハンドルへのポインター。
CERT_STORE_PROV_FILENAME_A ファイルから取得した証明書、CRL、CTL でストアを初期化します。プロバイダーはファイルを開き、まずシリアル化されたストアとして、次に PKCS #7 署名付きメッセージとして、最後に単一のエンコードされた証明書として読み取ることを試みます。

dwEncodingType パラメーターには、メッセージと証明書の両方に使用するエンコード種類を指定する必要があります。ファイルに X.509 エンコードの証明書が含まれている場合、オープン操作は失敗し、GetLastError は ERROR_ACCESS_DENIED を返します。 dwFlags に CERT_FILE_STORE_COMMIT_ENABLE フラグが設定されている場合、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、CTL が、コレクションストアの検索や列挙の対象になります。

dwFlags の上位ワードは 0 に設定します。

NULL である必要があります。
CERT_STORE_PROV_REG レジストリのサブキーから取得した証明書、CRL、CTL でストアを初期化します。

このプロバイダーは、pvPara で渡されたキーの下にあるレジストリサブキー Certificates、CRLs、CTLs を開くか作成します。入力されたキーはプロバイダーによって閉じられません。プロバイダーは、戻る前に pvPara で渡されたキーの独自のコピーを開きます。dwFlags の下位ワードに CERT_STORE_READONLY_FLAG が設定されている場合、レジストリサブキーは RegOpenKey を KEY_READ_ACCESS で使用して開かれます。それ以外の場合、レジストリサブキーは RegCreateKey を KEY_ALL_ACCESS で使用して作成されます。開いたストアの内容に対する変更は、直ちにレジストリへ永続化されます。ただし、dwFlags の下位ワードに CERT_STORE_READONLY_FLAG が設定されている場合、ストアの内容への追加やコンテキストのプロパティの変更を試みるとエラーとなり、GetLastError は E_ACCESSDENIED コードを返します。

開かれているレジストリキーのハンドル。
CERT_STORE_PROV_SYSTEM_A 指定されたシステムストアから取得した証明書、CRL、CTL でストアを初期化します。

システムストアは、1 つ以上の物理ストアで構成される論理的なコレクションストアです。システムストアに関連付けられる物理ストアは、CertRegisterPhysicalStore 関数で登録します。システムストアが開かれると、それに関連付けられたすべての物理ストアも CertOpenStore の呼び出しによって開かれ、CertAddStoreToCollection 関数によってシステムストアのコレクションに追加されます。dwFlags の上位ワードはシステムストアの場所を示し、通常は CERT_SYSTEM_STORE_CURRENT_USER を設定します。レジストリ上の場所について詳しくは、このトピックの後半にある dwFlags および System Store Locations を参照してください。一部のシステムストアの場所はリモートから開くことができます。詳しくは System Store Locations を参照してください。

"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、CTL でストアを初期化します。この物理ストアはコレクションストアとしては開かれません。列挙や検索は、その 1 つの物理ストア内の証明書、CRL、CTL のみを対象とします。

dwFlags の上位ワードはシステムストアの場所を示し、通常は CERT_SYSTEM_STORE_CURRENT_USER を設定します。詳しくは、このトピックの後半にある dwFlags を参照してください。一部のシステムストアの場所はリモートから開くことができます。詳しくは System Store Locations を参照してください。

"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、CTL でストアを初期化します。

2 つの名前は円記号 (\) を挟んで区切ります。たとえば "Root.LocalMachine" のように指定します。ここで "Root" はシステムストアの名前、".LocalMachine" は物理ストアの名前です。システムストア名と物理ストア名に円記号を含めることはできません。dwFlags の上位ワードはシステムストアの場所を示し、通常は CERT_SYSTEM_STORE_CURRENT_USER です。詳しくは、このトピックの後半にある dwFlags を参照してください。一部の物理ストアの場所はリモートから開くことができます。

システムストア名と物理ストア名の両方を格納した、null で終わる Unicode 文字列へのポインター。
CERT_STORE_PROV_MSG 指定された暗号化メッセージから取得した証明書、CRL、CTL でストアを初期化します。dwEncodingType パラメーターには、メッセージと証明書の両方に使用するエンコード種類を指定する必要があります。 CryptMsgOpenToDecode の呼び出しによって返された、エンコードされたメッセージの HCRYPTMSG ハンドル。
CERT_STORE_PROV_PKCS7

sz_CERT_STORE_PROV_PKCS7

エンコードされた PKCS #7 署名付きメッセージから取得した証明書、CRL、CTL でストアを初期化します。dwEncodingType パラメーターには、メッセージと証明書の両方に使用するエンコード種類を指定する必要があります。 エンコードされたメッセージを表す CRYPT_DATA_BLOB 構造体へのポインター。
CERT_STORE_PROV_SERIALIZED

sz_CERT_STORE_PROV_SERIALIZED

シリアル化されたストアを格納するメモリ領域から取得した証明書、CRL、CTL でストアを初期化します。 シリアル化されたメモリ 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、CTL でストアを初期化します。

ストアに対して書き込み操作を行うには、クエリ文字列でフィルターなしの BASE クエリと単一の属性を指定する必要があります。

dwFlags パラメーターに CERT_LDAP_STORE_OPENED_FLAG フラグが含まれている場合、これは使用する確立済みの LDAP セッションを指定する CERT_LDAP_STORE_OPENED_PARA 構造体のアドレスです。

それ以外の場合、これは LDAP クエリ文字列を格納した、null で終わる Unicode 文字列へのポインターです。LDAP クエリ文字列について詳しくは、LDAP Dialect を参照してください。

CERT_STORE_PROV_SMART_CARD

CERT_STORE_PROV_SMART_CARD_W

sz_CERT_STORE_PROV_SMART_CARD

sz_CERT_STORE_PROV_SMART_CARD_W

現在は使用されていません。
dwEncodingTypeCERT_QUERY_ENCODING_TYPE

証明書エンコード種類とメッセージエンコード種類を指定します。エンコードが使用されるのは、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_ASN_ENCODING
65536 (0x10000)
PKCS #7 メッセージエンコードを指定します。
X509_ASN_ENCODING
1 (0x1)
X.509 証明書エンコードを指定します。
hCryptProvHCRYPTPROV_LEGACY暗号化プロバイダーへのハンドルです。このパラメーターには NULL を指定できます。
dwFlagsCERT_OPEN_STORE_FLAGS

これらの値は、上位ワードと下位ワードの値をビット単位の OR 演算で組み合わせたものです。

dwFlags の下位ワード部分は、開かれる証明書ストアのさまざまな一般的特性を制御します。この部分はすべてのストアプロバイダー種類で使用できます。dwFlags の下位ワード部分には、次のいずれかの値を指定できます。

値 意味
CERT_STORE_CREATE_NEW_FLAG
ストアが存在しない場合は新しいストアを作成します。ストアが既に存在する場合、この関数は失敗する必要があります。

CERT_STORE_OPEN_EXISTING_FLAG と CERT_STORE_CREATE_NEW_FLAG のいずれも設定されていない場合は、既存のストアを開き、まだ存在しない場合はストアを作成して開きます。

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
ストアから取得した証明書、CRL、CTL がすべて使用されなくなるまで、ストアのプロバイダーを閉じる処理を延期します。ストアが実際に閉じられるのは、そのストアから取得した最後の証明書、CRL、または CTL が解放されたときです。これらの証明書、CRL、CTL のプロパティに対する変更は、この関数の呼び出し後に行われたものであっても永続化する必要があります。

このフラグが設定されておらず、ストアから取得した証明書、CRL、CTL がまだ使用中である場合、それらの証明書、CRL、CTL のプロパティに対する変更を永続化してはなりません。

この関数が CERT_CLOSE_STORE_FORCE_FLAG を指定して呼び出された場合、CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG は無視する必要があります。

このフラグが設定され、かつ NULL ではない HCRYPTPROV 値が渡された場合、そのプロバイダーはこの関数の呼び出し後も引き続き使用されます。

CERT_STORE_DELETE_FLAG
ストアは開かれるのではなく削除されます。この関数は、削除の成功時と失敗時のいずれも FALSE を返します。削除の成功を示すには、 SetLastError を 0 で呼び出します。削除の失敗を示すには、SetLastError を適切なエラーコードで呼び出します。
CERT_STORE_ENUM_ARCHIVED_FLAG
通常、ストア内のすべての証明書を列挙する際には、CERT_ARCHIVED_PROP_ID プロパティが設定された証明書は無視されます。このフラグが設定されている場合、ストア内の証明書の列挙には、CERT_ARCHIVED_PROP_ID プロパティを持つものも含め、ストア内のすべての証明書が含まれます。
CERT_STORE_MAXIMUM_ALLOWED
許可される最大限のアクセス許可でストアを開きます。このフラグを指定した場合、レジストリストアはまず書き込みアクセスで開かれ、それが失敗した場合は読み取り専用アクセスで開き直されます。
CERT_STORE_NO_CRYPT_RELEASE_FLAG
このフラグは、hCryptProv パラメーターが NULL の場合には使用されません。このフラグが有効なのは、hCryptProv パラメーターに NULL ではない CSP ハンドルが渡された場合のみです。このフラグを設定すると、証明書ストアが閉じられる際に、既定以外の CSP が自動的に解放されるのを防ぎます。
CERT_STORE_OPEN_EXISTING_FLAG
既存のストアのみを開きます。ストアが存在しない場合、この関数は失敗します。
CERT_STORE_READONLY_FLAG
ストアを読み取り専用モードで開きます。ストアの内容を変更しようとするとエラーになります。このフラグが設定され、レジストリベースのストアプロバイダーが使用されている場合、レジストリサブキーは RegOpenKey を KEY_READ_ACCESS で使用して開かれます。それ以外の場合、レジストリサブキーは RegCreateKey を KEY_ALL_ACCESS で使用して作成されます。
CERT_STORE_SET_LOCALIZED_NAME_FLAG
このフラグがサポートされている場合、プロバイダーはストアの 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 の各種類のプロバイダーでサポートされます。
CERT_STORE_SHARE_CONTEXT_FLAG
同じストアを複数回開く場合にこのフラグを設定すると、開かれた各ストアインスタンス間で、証明書、CRL、または CTL コンテキストのエンコード部分のメモリを再利用し、メモリを効率的に使用できます。
CERT_STORE_UPDATE_KEYID_FLAG
キー識別子の一覧は CurrentUser と LocalMachine 内に存在します。これらのキー識別子は、証明書のプロパティとよく似たプロパティを持ちます。CERT_STORE_UPDATE_KEYID_FLAG が設定されている場合、そのストアの場所にある CERT_KEY_PROV_INFO_PROP_ID プロパティを持つすべてのキー識別子について、そのプロパティが、キー識別子のプロパティ CERT_KEY_PROV_INFO_PROP_ID、またはそのキー識別子に関連する証明書の CERT_KEY_IDENTIFIER_PROP_ID から自動的に更新されます。
CERT_STORE_BACKUP_RESTORE_FLAG
レジストリベースまたはファイルベースのシステムストアを開く際に、スレッドの 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 を基準として開かれます。詳しくは、 System Store Locations を参照してください。

次の上位ワードのフラグは、この既定の動作を上書きします。

値 意味
CERT_SYSTEM_STORE_RELOCATE_FLAG
設定されている場合、pvPara には文字列ではなく CERT_SYSTEM_STORE_RELOCATE_PARA 構造体へのポインターを格納する必要があります。この構造体は、ストアの名前とレジストリ上の場所の両方を示します。
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
既定では、CurrentUser の "Root" ストアを開くと、保護されたルートの一覧に含まれていない SystemRegistry のルートは、この関数が戻る前にキャッシュから削除されます。このフラグが設定されている場合、この既定の動作が上書きされ、SystemRegistry 内のすべてのルートが返され、保護されたルートの一覧の確認は行われません。

CERT_STORE_PROV_REGISTRY プロバイダーは、次の上位ワードのフラグを使用します。

値 意味
CERT_REGISTRY_STORE_SERIALIZED_FLAG
CERT_STORE_PROV_REG プロバイダーは、既定の保存操作を行う代わりに、証明書、CRL、CTL を単一のシリアル化されたストアのサブキーに保存します。既定では、各証明書、CRL、CTL はそれぞれ適切なサブキーの下に個別のレジストリサブキーとして保存されます。

このフラグは主に、CurrentUserGroupPolicy ストアや LocalMachineGroupPolicy ストアなど、グループポリシーテンプレート (GPT) からダウンロードされたストアで使用されます。

CERT_REGISTRY_STORE_SERIALIZED_FLAG が設定されている場合、ストアへの追加、削除、プロパティの変更は、 CertCloseStore が呼び出されるか、CERT_STORE_CTRL_COMMIT を指定して CertControlStore が呼び出されるまで永続化されません。

CERT_REGISTRY_STORE_REMOTE_FLAG
pvPara にはリモートコンピューター上のレジストリキーへのハンドルが格納されます。リモートコンピューター上のレジストリキーにアクセスするには、アクセスを許可するようにリモートコンピューターのセキュリティのアクセス許可が設定されている必要があります。詳しくは「解説」を参照してください。

CERT_STORE_PROV_FILE および CERT_STORE_PROV_FILENAME のプロバイダー種類は、次の上位ワードのフラグを使用します。

値 意味
CERT_FILE_STORE_COMMIT_ENABLE
このフラグを設定すると、ストアへの追加やストア内のコンテキストのプロパティに対する変更が、 CertCloseStore の呼び出し時、または CERT_STORE_CONTROL_COMMIT を指定した CertControlStore の呼び出し時に、ファイルストアへコミットされます。

dwFlags に CERT_FILE_STORE_COMMIT_ENABLE と CERT_STORE_READONLY_FLAG の両方が設定されている場合、CertOpenStore は E_INVALIDARG で失敗します。

CERT_STORE_PROV_LDAP プロバイダー種類は、次の上位ワードのフラグを使用します。

値 意味
CERT_LDAP_STORE_SIGN_FLAG
一部のアプリケーションが必要とする完全性を確保するため、LDAP サーバーとの間のすべての LDAP トラフィックに、Kerberos 認証プロトコルを使用してデジタル署名します。
CERT_LDAP_STORE_OPENED_FLAG
既存の LDAP セッションを使用する場合に、このフラグを指定します。このフラグが指定されている場合、pvPara パラメーターは、使用する LDAP セッションに関する情報を格納した CERT_LDAP_STORE_OPENED_PARA 構造体のアドレスになります。
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
pvPara パラメーターで指定された URL に対して、A レコードのみの DNS 参照を実行します。これにより、URL のホスト名を解決する際に誤った DNS クエリが生成されるのを防ぎます。pvPara パラメーターにドメイン名ではなくホスト名を渡す場合に、このフラグを使用します。
CERT_LDAP_STORE_UNBIND_FLAG
このフラグを CERT_LDAP_STORE_OPENED_FLAG フラグと共に使用すると、ストアが閉じられるときに LDAP セッションのバインドが解除されます。システムは、ストアが閉じられるときに ldap_unbind 関数を使用して LDAP セッションのバインドを解除します。
pvParavoid*この関数に追加情報を渡すことができる 32 ビット値です。このパラメーターの内容は、lpszStoreProvider の値やその他のパラメーターによって異なります。
hCertStoreHCERTSTORE開かれたメモリ内のストアのハンドルであり、 CertAddSerializedElementToStore など、ストアに関連する他の API の呼び出しに使用できます。
pStoreProvInfoCERT_STORE_PROV_INFO*

更新対象の CERT_STORE_PROV_INFO 構造体へのポインターです。このデータ構造は呼び出し前にゼロで初期化され、cbSize が設定されています。

CERT_STORE_PROV_INFO 構造体の cStoreProvFunc メンバーは、実装されているコールバック関数の数であり、最後に設定する必要があります。cStoreProvFunc が設定された後は、 CertAddEncodedCertificateToStore などの以降のストア呼び出しにおいて、対応するプロバイダーのコールバック関数が呼び出されます。

公式ドキュメント

CertDllOpenStoreProv 関数はストアプロバイダーによって実装され、ストアを開くために使用されます。この関数は CertOpenStore 関数によって呼び出されます。

メモ 最初の 5 つのパラメーターは、 CertOpenStore の対応するパラメーターと同一です。

戻り値

成功した場合は TRUE、それ以外の場合は FALSE。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)