CertOpenStore 関数 (wincrypt.h)

CertOpenStore 関数は、指定したストア プロバイダーの種類を使用して 証明書ストアを開きます。 この関数はほとんどの目的で証明書ストアを開くことができますが、最も一般的な証明書ストアを開くには CertOpenSystemStore することをお勧めします。 CertOpenStore は、より複雑なオプションや特殊なケースに必要です。

構文

HCERTSTORE CertOpenStore(
  [in] LPCSTR            lpszStoreProvider,
  [in] DWORD             dwEncodingType,
  [in] HCRYPTPROV_LEGACY hCryptProv,
  [in] DWORD             dwFlags,
  [in] const void        *pvPara
);

パラメーター

[in] lpszStoreProvider

ストア プロバイダーの種類を含む null で終わる ANSI 文字列へのポインター。

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

価値 意味
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
他のストアのコレクションとなるストアを開きます。 ストアは、CertAddStoreToCollection と CertRemoveStoreFromCollectionを使用してコレクションに追加または削除されます。 ストアがコレクションに追加されると、そのストア内のすべての証明書、CRL、および CCTL がコレクション ストアの検索または列挙に使用できるようになります。

dwFlags の高い単語は 0 に設定されます。

pvPara 値: pvPara パラメーターは NULLする必要があります。

CERT_STORE_PROV_FILE
指定した開いているファイルから読み取られた証明書、CRL、および CCTL を使用してストアを初期化します。 このプロバイダーは、ファイルに、PKCS #7 署名済みメッセージまたは単一のエンコードされた証明書ではなく、シリアル化されたストアのみを含む必要があります。

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

pvPara 値: pvPara パラメーターには、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 値は次のようになります。

  • CERT_STORE_CREATE_NEW_FLAG フラグが設定されている場合、CreateFileCREATE_NEWを使用します。
  • CERT_STORE_OPEN_EXISTING_FLAG フラグが設定されている場合、CreateFile OPEN_EXISTINGを使用します。
  • dwFlagsの他のすべての設定では、CreateFile OPEN_ALWAYSを使用します。

dwFlags CERT_FILE_STORE_COMMIT_ENABLEが含まれている場合、ファイルは、開かれたファイルの種類に応じて PKCS #7 またはシリアル化されたストアとしてコミットされます。 ファイルが空であった場合、またはファイル名の拡張子が .p7c または .spc の場合、ファイルは PKCS #7 としてコミットされます。 それ以外の場合、ファイルはシリアル化されたストアとしてコミットされます。

pvPara 値: pvPara パラメーターには、開いていない既存のファイルの名前を含む null で終わる ANSI 文字列へのポインターが含まれている必要があります。

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
CERT_STORE_PROV_FILENAME_Aと同じです。

pvPara 値: pvPara パラメーターには、既存の未開ファイルの名前を含む null で終わる Unicode 文字列へのポインターが含まれている必要があります。

CERT_STORE_PROV_LDAP(_W)
sz_CERT_STORE_PROV_LDAP(_W)
LDAP クエリの結果から証明書、CRL、および CCTL を使用してストアを初期化します。

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

pvPara 値: dwFlags パラメーターに CERT_LDAP_STORE_OPENED_FLAGが含まれている場合は、pvPara 、使用する確立された LDAP セッションを指定する CERT_LDAP_STORE_OPENED_PARA 構造体のアドレスに設定します。

それ以外の場合は、pvPara LDAP クエリ文字列を含む null で終わる Unicode 文字列を指す値に設定します。 LDAP クエリ文字列の詳細については、「LDAP 言語を参照してください。

CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY
キャッシュされたメモリに証明書ストアを作成します。 証明書、証明書失効リスト (CRL)、証明書信頼リスト (CCTL) は、最初はストアに読み込まれません。 通常、一時ストアを作成するために使用されます。

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

pvPara 値: pvPara パラメーターは使用されません。

CERT_STORE_PROV_MSG
指定した暗号化メッセージの証明書、CRL、および CTL を使用してストアを初期化します。 dwEncodingType パラメーターには、メッセージと証明書の両方で使用されるエンコードの種類を含める必要があります。

pvPara 値: pvPara パラメーターには、CryptMsgOpenToDecode呼び出しによって返される、エンコードされたメッセージの HCRYPTMSG ハンドルが含まれています。

CERT_STORE_PROV_PHYSICAL(_W)
sz_CERT_STORE_PROV_PHYSICAL(_W)
論理システム ストアのメンバーである指定された物理ストアの証明書、CRL、および CCTL を使用してストアを初期化します。

2 つの名前は、"Root.Default" などの円記号 (\) で区切ります。 ここで、"Root" はシステム ストアと " の名前です。Default" は物理ストアの名前です。 システム名と物理ストア名に円記号を含めることはできません。 dwFlags の高い単語は、システム ストアの場所 (通常はCERT_SYSTEM_STORE_CURRENT_USER) を示します。 詳細については、このトピックで後述 dwFlags を参照し、「システム ストアの場所」を参照してください。 一部の物理ストアの場所はリモートで開くことができます。

pvPara 値: pvPara パラメーターは、システム ストア名と物理名の両方を含む null で終わる Unicode 文字列を指します。

CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7
エンコードされた PKCS #7 署名付きメッセージから、証明書、CRL、および CCTL を使用してストアを初期化します。 dwEncodingType パラメーターでは、メッセージと証明書の両方で使用するエンコードの種類を指定する必要があります。

pvPara 値: pvPara パラメーターは、エンコードされたメッセージを表す CRYPT_DATA_BLOB 構造体を指します。

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
PKCS #12 パケットの内容を使用してストアを初期化します。

PKCS #12 パケットが NULL または空のパスワードで保護されている場合、この関数はストアを開くことに成功します。

Windows 8 および Windows Server 2012 以降では、PFX パケットに埋め込まれたパスワードが Active Directory (AD) プリンシパルに保護され、現在のユーザーがそのプリンシパルのメンバーとしてパスワードを復号化するアクセス許可を持っている場合、この関数はストアを開くことに成功します。 詳細については、pvPara パラメーターと、PFXExportCertStoreEx 関数の PKCS12_PROTECT_TO_DOMAIN_SIDS フラグを参照してください。

Windows 8 および Windows Server 2012 以降では、AD プリンシパルに対する PFX パスワードを保護できます。

pvPara 値: pvPara パラメーターは、PKCS #12 パケットを表す CRYPT_DATA_BLOB 構造体を指します。

CERT_STORE_PROV_REG
レジストリ サブキーから証明書、CRL、および CCTL を使用してストアを初期化します。

このプロバイダーは、証明書CRL、および pvParaで渡されたキーの下に CCTL 開くか作成します。 入力キーがプロバイダーによって閉じられない。 戻る前に、プロバイダーは pvPara渡されたキーの独自のコピーを開きます。 CERT_STORE_READONLY_FLAGが dwFlagsの下位ワード 設定されている場合、レジストリ サブキーは、KEY_READ_ACCESSで RegOpenKey を使用して開かれます。 それ以外の場合、レジストリ サブキーは、RegCreateKey とKEY_ALL_ACCESSを使用して作成されます。 開いているストアの内容に対する変更は、直ちにレジストリに保持されます。 ただし、CERT_STORE_READONLY_FLAGが dwFlagsの下位ワード 設定されている場合、ストアのコンテンツに追加したり、コンテキストのプロパティを変更しようとすると、E_ACCESSDENIED コードを返 GetLastError エラーが発生します。

pvPara 値: pvPara パラメーターには、開いているレジストリ キーのハンドルが含まれています。

CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED
シリアル化されたストアを含むメモリの場所から、証明書、CRL、および CCTL を使用してストアを初期化します。

pvPara 値: pvPara パラメーターは、シリアル化されたメモリ BLOB を含む CRYPT_DATA_BLOB 構造体を指します。

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
現在使用されていません。
CERT_STORE_PROV_SYSTEM_A
指定したシステム ストアの証明書、CRL、および CCTL を使用してストアを初期化します。

システム ストアは、1 つ以上の物理ストアで構成される論理コレクション ストアです。 システム ストアに関連付けられている物理ストアは、CertRegisterPhysicalStore 関数に登録されます。 システム ストアを開いた後、関連付けられているすべての物理ストアは、CertOpenStore の呼び出しによっても開き、CertAddStoreToCollection 関数を使用してシステム ストア コレクションに追加されます。 dwFlags の高い単語は、システム ストアの場所 (通常は CERT_SYSTEM_STORE_CURRENT_USER に設定) を示します。 レジストリの場所の詳細については、このトピックで後述 dwFlags およびシステム ストアの場所の を参照してください。 一部のシステム ストアの場所はリモートで開くことができます。詳細については、「システム ストアの場所」を参照してください。

pvPara 値: pvPara パラメーターは、"My" や "Root" などのシステム ストア名を含む null で終わる ANSI 文字列を指します。

CERT_STORE_PROV_SYSTEM(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
CERT_STORE_PROV_SYSTEM_Aと同じです。

pvPara 値: pvPara パラメーターは、"My" や "Root" などのシステム ストア名を含む null で終わる Unicode 文字列を指します。

CERT_STORE_PROV_SYSTEM_REGISTRY_A
物理レジストリ ストアの証明書、CRL、および CCTL を使用してストアを初期化します。 物理ストアはコレクション ストアとして開かされていません。 列挙と検索は、その 1 つの物理ストア内の証明書、CRL、および CCTL のみを通過します。

dwFlags の高い単語は、システム ストアの場所 (通常は CERT_SYSTEM_STORE_CURRENT_USER に設定) を示します。 詳細については、このトピックで後述 dwFlags を参照してください。 一部のシステム ストアの場所はリモートで開くことができます。詳細については、「システム ストアの場所を参照してください。

pvPara 値: pvPara パラメーターは、"My" や "Root" などのシステム ストア名を含む null で終わる ANSI 文字列を指します。

CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
CERT_STORE_PROV_SYSTEM_REGISTRY_Aと同じです。

pvPara 値: pvPara パラメーターは、"My" や "Root" などのシステム ストア名を含む null で終わる Unicode 文字列を指します。

[in] dwEncodingType

証明書エンコードの種類 とメッセージ エンコードの種類 を指定します。 エンコードは、CertSaveStore 関数の dwSaveAs パラメーターに CERT_STORE_SAVE_AS_PKCS7が含まれている場合にのみ使用されます。 それ以外の場合、dwMsgAndCertEncodingType パラメーターは使用されません。

このパラメーターは、lpszStoreProvider パラメーターに CERT_STORE_PROV_MSGCERT_STORE_PROV_PKCS7、または CERT_STORE_PROV_FILENAME プロバイダーの種類が指定されている場合にのみ適用されます。 他のすべてのプロバイダーの種類では、このパラメーターは使用されず、0 に設定する必要があります。

このパラメーターには、次の 1 つ以上の値を組み合わせて使用できます。

価値 意味
PKCS_7_ASN_ENCODING
65536 (0x10000)
PKCS #7 メッセージ エンコーディングを指定します。
X509_ASN_ENCODING
1 (0x1)
X.509 証明書エンコードを指定します。

[in] hCryptProv

このパラメーターは使用されず、NULLを に設定する必要があります。

Windows Server 2003 および Windows XP: 暗号化プロバイダーへのハンドル。 このパラメーター NULL を渡すと、適切な既定のプロバイダーが使用されます。 既定のプロバイダーを使用することをお勧めします。 既定または指定された暗号化プロバイダーは、サブジェクト証明書または CRL の署名を検証するすべてのストア関数に使用されます。このパラメーターのデータ型は HCRYPTPROVです。

[in] dwFlags

これらの値は、ビットごとのOR 演算を使用して組み合わされた高ワード値と低ワード値で構成されます。

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

価値 意味
CERT_STORE_BACKUP_RESTORE_FLAG
レジストリまたはファイル ベースのシステム ストアを開くには、スレッドのSE_BACKUP_NAMEとSE_RESTORE_NAME の特権 を使用します。 スレッドにこれらの権限がない場合、この関数はアクセス拒否エラーで失敗する必要があります。
CERT_STORE_CREATE_NEW_FLAG
新しいストアが存在しない場合は、新しいストアが作成されます。 ストアが既に存在する場合、関数は失敗します。

CERT_STORE_OPEN_EXISTING_FLAGCERT_STORE_CREATE_NEW_FLAG も設定されていない場合は、ストアが存在する場合は開かれます。存在しない場合は作成され、開かれます。

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
ストアから取得したすべての証明書、CRL、または CCTL が使用されなくなるまで、ストアのプロバイダーの終了を延期します。 ストアから取得した最後の証明書、CRL、または CTL が解放されると、ストアは実際に閉じられます。 CertCloseStoreの呼び出しの後でも、これらの証明書、CRL、および CCTL のプロパティに加えられた変更は保持されます。

このフラグが設定されておらず、ストアから取得した証明書、CRL、または CCTL がまだ使用されている場合、それらの証明書、CRL、および CCTL のプロパティに対する変更は保持されません。

この関数が CERT_CLOSE_STORE_FORCE_FLAGで呼び出された場合、CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG は無視されます。

このフラグが設定され、hCryptProv パラメーター値以外の NULL 値が渡された場合、そのプロバイダーは、この関数の呼び出し後も引き続き使用されます。

CERT_STORE_DELETE_FLAG
ストアは、開かれるのではなく削除されます。 この関数は、削除の成功と失敗の両方 NULL を返します。 削除の成功を確認するには、GetLastError呼び出します。ストアが削除された場合は 0 を返し、削除されなかった場合は 0 以外の値を返します。
CERT_STORE_ENUM_ARCHIVED_FLAG
通常、ストア内のすべての証明書の列挙では、CERT_ARCHIVED_PROP_ID プロパティが設定された証明書は無視されます。 このフラグが設定されている場合、ストア内の証明書の列挙には、ストア内のすべての証明書 (CERT_ARCHIVED_PROP_ID プロパティを持つ証明書を含む) が含まれます。
CERT_STORE_MAXIMUM_ALLOWED_FLAG
許可されているアクセス許可の最大セットでストアを開きます。 このフラグが指定されている場合、レジストリ ストアは最初に書き込みアクセス権で開き、失敗した場合は読み取り専用アクセスで再び開かれます。
CERT_STORE_NO_CRYPT_RELEASE_FLAG
このフラグは、hCryptProv パラメーターが NULL場合には使用されません。 このフラグは、以外の NULL CSP ハンドルが hCryptProv パラメーターとして渡された場合にのみ有効です。 このフラグを設定すると、証明書ストアが閉じられたときに既定以外の CSP が自動的に解放されるのを防ぐことができます。
CERT_STORE_OPEN_EXISTING_FLAG
既存のストアのみを開きます。 ストアが存在しない場合、関数は失敗します。
CERT_STORE_READONLY_FLAG
ストアを読み取り専用モードで開きます。 ストアの内容を変更しようとすると、エラーが発生します。 このフラグが設定され、レジストリ ベースのストア プロバイダーが使用されている場合、レジストリ サブキーは、KEY_READ_ACCESSRegOpenKey を使用して開かれます。 それ以外の場合、レジストリ サブキーは、KEY_ALL_ACCESSRegCreateKey を使用して作成されます。
CERT_STORE_SET_LOCALIZED_NAME_FLAG
このフラグがサポートされている場合、プロバイダーはストアの CERT_STORE_LOCALIZED_NAME_PROP_ID プロパティを設定します。 ローカライズされた名前は、dwPropIDCERT_STORE_LOCALIZED_NAME_PROP_IDに設定された CertGetStoreProperty 関数を呼び出すことによって取得できます。 このフラグは、CERT_STORE_PROV_FILENAMECERT_STORE_PROV_SYSTEMCERT_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_PROV_SYSTEMCERT_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_USERHKEY_LOCAL_MACHINE、または定義済みのレジストリ キー HKEY_USERS 基準として開かれます。 詳細については、「システム ストアの場所の」を参照してください。

次の高ワード フラグは、この既定の動作をオーバーライドします。

価値 意味
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_REMOTE_FLAG
pvPara には、リモート コンピューター上のレジストリ キーへのハンドルが含まれています。 リモート コンピューター上のレジストリ キーにアクセスするには、リモート コンピューターのセキュリティアクセス許可がアクセスを許可するように設定されている必要があります。 詳細については、「解説」を参照してください。
CERT_REGISTRY_STORE_SERIALIZED_FLAG
CERT_STORE_PROV_REG プロバイダーは、既定の保存操作を実行する代わりに、証明書、CRL、および CTL を 1 つのシリアル化されたストア サブキーに保存します。 既定では、各証明書、CRL、または CTL は、適切なサブキーの下に個別のレジストリ サブキーとして保存されます。

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

CERT_REGISTRY_STORE_SERIALIZED_FLAG が設定されている場合、ストアの追加、削除、またはプロパティの変更は、CertCloseStore または CERT_STORE_CTRL_COMMITを使用して CertControlStore を するまで保持されません。

 

CERT_STORE_PROV_FILE および CERT_STORE_PROV_FILENAME プロバイダーの種類では、次の高ワード フラグが使用されます。

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

dwFlagsで CERT_FILE_STORE_COMMIT_ENABLECERT_STORE_READONLY_FLAG の両方が設定されている場合、CertOpenStoreE_INVALIDARG 失敗します。

 

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

価値 意味
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
pvPara パラメーターで指定された URL に対して A レコードのみの DNS 参照を実行します。 これにより、URL ホスト名を解決するときに、偽の DNS クエリが生成されなくなります。 このフラグは、pvPara パラメーターのドメイン名ではなく、ホスト名を渡すときに使用します。
CERT_LDAP_STORE_OPENED_FLAG
既存の LDAP セッションを使用するには、このフラグを使用します。 このフラグを指定すると、pvPara パラメーターは、使用する LDAP セッションに関する情報を含む CERT_LDAP_STORE_OPENED_PARA 構造体のアドレスです。
CERT_LDAP_STORE_SIGN_FLAG
一部のアプリケーションで必要な整合性を提供するには、Kerberos 認証プロトコルを使用して、LDAP サーバーとの間のすべての LDAP トラフィックにデジタル署名します。
CERT_LDAP_STORE_UNBIND_FLAG
このフラグを CERT_LDAP_STORE_OPENED_FLAG フラグと共に使用して、ストアが閉じられたときに LDAP セッションがバインド解除されるようにします。 システムは、ストアが閉じられたときに、ldap_unbind 関数を使用して LDAP セッションのバインドを解除します。

[in] pvPara

この関数の追加情報を含めることができる 32 ビット値。 このパラメーターの内容は、lpszStoreProvider およびその他のパラメーターの値によって異なります。

戻り値

関数が成功した場合、関数は 証明書ストアにハンドルを返します。 ストアの使用が完了したら、CertCloseStore 関数を呼び出してハンドルを解放します。

関数が失敗した場合は、NULLを返します。 拡張エラー情報については、GetLastError呼び出します。

CreateFileReadFile、またはレジストリ エラーが反映され、エラー コードが返される可能性があることに注意してください。 CertOpenStore には、独自の単一のエラー コードであるERROR_FILE_NOT_FOUND コードがあります。これは、lpszStoreProvider パラメーターで指定されたプロバイダーが関数で見つからなかったことを示します。
 

備考

システム ストアは、1 つ以上の物理兄弟ストアで構成されるコレクションです。 システム ストアごとに、定義済みの物理兄弟ストアがあります。 CERT_SYSTEM_STORE_CURRENT_USERで "My" などのシステム ストアを開くと、CertOpenStore が呼び出され、システム ストア コレクション内のすべての物理ストアが開きます。 これらの各物理ストアは、CertAddStoreToCollection 関数を使用してシステム ストア コレクションに追加されます。 これらの物理ストア内のすべての証明書、CRL、および CCTL は、論理システム ストア コレクションを通じて使用できます。

証明書コンテキストの順序はストア内で保持されない場合があります。 特定の証明書にアクセスするには、ストア内の証明書を反復処理する必要があります。
 

次のシステム ストアの場所をリモートで開くことができます。

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

システム ストアの場所は、pvPara に渡される文字列の前にコンピューター名を付けることで、リモートで開かれます。 リモート システム ストア名の例を次に示します。

  • ComputerName\CA
  • \\ComputerName\CA
  • ComputerName\ServiceName\Trust
  • \\ComputerName\ServiceName\Trust

システム ストアの詳細については、「システム ストアの場所の」を参照してください。

自動的に移行されるストアの詳細については、「証明書ストアの移行」を参照してください。

次の例は、ストア プロバイダーの種類が異なる複数の証明書ストアを開く方法を示しています。 この例では、「DACL の作成」トピックで定義されている CreateMyDACL 関数を使用して、開いているファイルが適切な DACL で作成されるようにします。 他のストア プロバイダーの種類を開くその他の例については、「証明書ストアを開くためのサンプル C コード」を参照してください。

//-------------------------------------------------------------------
// Open a system store, in this case, the My store.

HCERTSTORE hSysStore = NULL;
if(hSysStore = CertOpenStore(
   CERT_STORE_PROV_SYSTEM,          // The store provider type
   0,                               // The encoding type is
                                    // not needed
   NULL,                            // Use the default HCRYPTPROV
   CERT_SYSTEM_STORE_CURRENT_USER,  // Set the store location in a
                                    // registry location
   L"MY"                            // The store name as a Unicode 
                                    // string
   ))
{
    printf("The system store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the system store!\n");
    exit(1);
}

// Other common system stores include "Root", "Trust", and "Ca".


//-------------------------------------------------------------------
// Open a memory store. 

HCERTSTORE hMemStore = NULL;
if(hMemStore = CertOpenStore(
   CERT_STORE_PROV_MEMORY,   // The memory provider type
   0,                        // The encoding type is not needed
   NULL,                     // Use the default HCRYPTPROV
   0,                        // Accept the default dwFlags
   NULL                      // pvPara is not used
   ))
{
    printf("The memory store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the memory store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// Open a read-only store from disk.

HANDLE       hFile = NULL;
HCERTSTORE   hFileStore = NULL;
LPCSTR       pszFileName = "TestStor2.sto";
SECURITY_ATTRIBUTES  sa;        // For DACL

// Create a DACL to use when opening the file.
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;  

// Call function to set the DACL. The DACL is set in the 
// SECURITY_ATTRIBUTES lpSecurityDescriptor member.
if (!CreateMyDACL(&sa))
{
     // Error encountered; generate message and exit.
     printf("Failed CreateMyDACL.\n");
        exit(1);
}

// Obtain the file handle of an existing file.
if (hFile = CreateFile(
     pszFileName,                  // The file name
     GENERIC_READ|GENERIC_WRITE,   // Access mode: Read from and
                                   // write to this file
     0,                            // Share mode
     &sa,                          // Uses the DACL created 
                                   // previously 
     OPEN_ALWAYS,                  // How to create
     FILE_ATTRIBUTE_NORMAL,        // File attributes
     NULL))                        // Template
{
    printf("The file was opened successfully.\n");
}
else
{
    printf("An error occurred during opening of the file!\n");
    exit(1);
}

//-------------------------------------------------------------------
//  This file can contain data before the store itself.
//  At this point, read and use data in the open file that precedes
//  the serialized certificate store data. 
//  To open the certificate store, the file pointer must
//  be placed at the beginning of the certificate store data.

//-------------------------------------------------------------------
//  Open the store.

if(hFileStore = CertOpenStore(
    CERT_STORE_PROV_FILE,     // Load certificates from a file
    0,                        // Encoding type not used
    NULL,                     // Use the default HCRYPTPROV
    CERT_STORE_READONLY_FLAG, // Read-only store
    hFile                     // The handle for the open file 
                              // that is the source of the 
                              // certificates
    ))
{
    printf("The file store was created successfully.\n");
}
else
{
    printf("An error occurred during creation of the file store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// After processing, close the certificate stores and the file.

if(CertCloseStore(
        hSysStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The system store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "system store.\n");
}

if(CertCloseStore(
        hMemStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The memory store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "memory store.\n");
}

if(CertCloseStore(
        hFileStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The file store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file store.\n");
}

if(CloseHandle(hFile))
{
    printf("The file was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file.\n");
}

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Crypt32.lib
DLL Crypt32.dll

関連項目

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore

CertSaveStore

証明書ストア関数