次の方法で共有


証明書ストアの状態の管理

証明書ストアの状態を管理するためのサービスを提供する関数がいくつかあります。

証明書にアクセスするには、証明書が格納されている証明書ストアを CertOpenStore または CertOpenSystemStore の呼び出しで開く必要があります。

通常、証明書ストアはキャッシュされたメモリで開かれます。 新しいストアまたはその内容は、ローカル レジストリ、リモート コンピューター上のレジストリ、ディスク ファイル、PKCS #7 メッセージ、またはその他のソースから読み込むことができます。

CryptoAPI 証明書ストア関数を使用すると、ストアは、キャッシュされたメモリの外部 (たとえば、Microsoft Certificate Server Database によって提供される証明書の外部データベースなど) で証明書を維持することもできます。

CertOpenStore 関数のパラメーターの 1 つである lpszStoreProvider は、開いているストアの種類と、そのストアを開くために使用されるプロバイダーを決定します。 さまざまなプロバイダーを使用して証明書ストアを開く例については、「証明書ストアを 開く C コードの例」を参照してください。

CertCloseStore は証明書ストアを閉じます。 証明書ストアが閉じられると、そのストア内の各証明書コンテキストの 参照カウント が 1 つ減ります。 参照カウントが 0 になる証明書のメモリが解放されます。

CertCloseStore でCERT_CLOSE_STORE_FORCE_FLAGを設定すると、証明書ストアが閉じられ、参照カウントに関係なく、すべての証明書コンテキストのメモリが解放されます。 マルチスレッド プログラムなど、望ましくない場合があります。 CERT_CLOSE_STORE_CHECK_FLAGが設定されている場合、ストアは閉じられますが、参照カウントが 0 に減っていない証明書にメモリがまだ割り当てられている場合は、関数によって警告値が返されます。 証明書の参照カウントが 0 より大きい場合、その証明書コンテキストの重複は解放されていません。 CertFreeCertificateContextCertFreeCRLContext、および CertFreeCTLContext を使用して、開いたままの証明書を解放します。

注意

証明書コンテキストは、他のメンバーの中でも、エンコードされた証明書 BLOB へのポインターと、CERT_INFO構造体へのポインターを持つCERT_CONTEXT型の構造体です。 CERT_INFO構造には、最も重要な証明書データが含まれています。 証明書証明書失効リスト (CRL)、および証明書信頼リスト (CTL) コンテキスト構造の詳細については、「証明書コンテキストのエンコードとデコード」を参照してください。

各証明書コンテキストには、割り当てられているコンテキストのアドレスのコピー数を示す 参照カウント も含まれています。 証明書コンテキストが何らかの方法で複製されるたびに、その参照カウントは 1 ずつ増加します。 証明書コンテキストへのポインターが解放されるたびに、証明書コンテキストの参照カウントは 1 ずつ減らされます。 証明書コンテキストの参照カウントが 0 に達すると、コンテキストを保持するメモリは割り当て解除されます。 証明書コンテキストに割り当てられたメモリは、そのコンテキストがストア内にあり、ストアが CERT_CLOSE_STORE_FORCE_FLAG を使用して閉じられると、割り当て解除されます。 コンテキストのメモリが割り当て解除され、そのコンテキストへのポインターがまだ使用されている場合、それらのポインターは無効になります。

 

CertDuplicateStore は、 ストアの 参照数 を増やします。

CertSaveStore は、ストアの内容をディスク ファイルまたはメモリの場所に保存します。

CertControlStore は、開いている間にストアを管理します。 開いているストアを持つアプリケーションは、そのストアの永続化状態が他のプロセスによって変更されたときに通知できます。 これは、ドメイン コントロール コンピューターからローカル コンピューター ストアに新しい証明書がコピーされた場合に発生する可能性があります。

変更が検出されると、キャッシュされたストアは、ストアの永続化された状態と一致するようにキャッシュされたストアを再同期できます。 CertControlStore では、キャッシュされたストアの変更が自動的に保存されない場合に、キャッシュされたストアの変更を永続的ストレージにコピーするプロセスもサポートされています。

証明書ストアに似た証明書コンテキストには、拡張プロパティを含めることができます。 CertSetStoreProperty は、拡張プロパティを証明書ストアに追加します。 CertGetStoreProperty は、証明書ストアに設定されているプロパティを取得します。 現時点では、定義済みの証明書ストア プロパティはストアのローカライズされた名前のみです。