CertEnumCertificatesInStore 関数 (wincrypt.h)

CertEnumCertificatesInStore 関数は、証明書ストアの最初または次の証明書を取得します。 ループで使用されるこの関数は、証明書ストア内のすべての証明書を順番に取得できます。

構文

PCCERT_CONTEXT CertEnumCertificatesInStore(
  [in] HCERTSTORE     hCertStore,
  [in] PCCERT_CONTEXT pPrevCertContext
);

パラメーター

[in] hCertStore

証明書ストアのハンドル。

[in] pPrevCertContext

前の 証明書コンテキストの CERT_CONTEXT へのポインター 見つかりました。

列挙を開始し、ストア内の最初の証明書を取得するには、このパラメーターを NULL する必要があります。 pPrevCertContext 、関数の前の呼び出しによって返されたポインターに設定することで、連続する証明書が列挙されます。 この関数は、このパラメーターの非NULL 値によって参照される CERT_CONTEXT を解放します。

コレクション ストアを含む論理ストアの場合、この関数によって返される pCertContext の複製を使用して、列挙の新しいサブシーケンスを開始することはできません。これは、重複した証明書によって初期列挙 状態が失われるためです。 列挙体は、CertDeleteCertificateFromStoreによって以前に削除されたすべての証明書をスキップします。

戻り値

関数が成功した場合、関数はストア内の次の CERT_CONTEXT へのポインターを返します。 ストアに証明書がこれ以上存在しない場合、この関数は null返します。

拡張エラー情報については、GetLastError呼び出します。 考えられるエラー コードの一部を次に示します。

価値 形容
E_INVALIDARG
hCertStore パラメーターのハンドルは、pPrevCertContextが指す証明書コンテキストと同じではありません。
CRYPT_E_NOT_FOUND
証明書が見つかりませんでした。 これは、ストアが空の場合、または関数がストアのリストの末尾に達した場合に発生します。
ERROR_NO_MORE_FILES
外部ストアに適用されます。 証明書が見つかりませんでした。 これは、ストアが空の場合、または関数がストアのリストの末尾に達した場合に発生します。

備考

返されたポインターは、後続の呼び出しで pPrevCertContext パラメーターとして渡されると解放されます。 それ以外の場合は、CertFreeCertificateContext呼び出してポインターを解放する必要があります。 CertEnumCertificatesInStore に渡される pPrevCertContextNULL 以外の は、エラーの場合でも常に解放されます。

現在列挙されている証明書の複製は、CertDuplicateCertificateContext呼び出すことによって作成できます。

次の例では、証明書ストア内の証明書コンテキストを一覧表示します。 この関数を使用する別の例については、「例 C プログラム: 証明書ストアから証明書を削除する」を参照してください。

#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")


//--------------------------------------------------------------------
// Declare and initialize variables.
HANDLE          hStoreHandle = NULL;
PCCERT_CONTEXT  pCertContext = NULL;   
char * pszStoreName = "CA";

//--------------------------------------------------------------------
// Open a system certificate store.
if (hStoreHandle = CertOpenSystemStore(
     NULL,     
     pszStoreName))
    {
         printf("The %s store has been opened. \n", pszStoreName);
    }
    else
    {
         printf("The store was not opened.\n");
         exit(1);
    }

//-------------------------------------------------------------------
// Find the certificates in the system store. 
while(pCertContext= CertEnumCertificatesInStore(
      hStoreHandle,
      pCertContext)) // on the first call to the function,
                     // this parameter is NULL 
                     // on all subsequent calls, 
                     // this parameter is the last pointer 
                     // returned by the function
{
    //----------------------------------------------------------------
    // Do whatever is needed for a current certificate.
    // ...
} // End of while.

//--------------------------------------------------------------------
//   Clean up.
if (!CertCloseStore(
         hStoreHandle,
         0))
{
    printf("Failed CertCloseStore\n");
    exit(1);
}

必要条件

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

関連項目

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

証明書関数の