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 に渡される NULL 以外の pPrevCertContext は、エラーの場合でも常に解放されます。

現在列挙されている証明書の複製は、 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 アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

こちらもご覧ください

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

証明書関数