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 を呼び出します。 考えられるエラー コードの一部を次に示します。
値 | 説明 |
---|---|
|
hCertStore パラメーターのハンドルは、pPrevCertContext が指す証明書コンテキストのハンドルと同じではありません。 |
|
証明書が見つかりませんでした。 これは、ストアが空の場合、または関数がストアのリストの末尾に達した場合に発生します。 |
|
外部ストアに適用されます。 証明書が見つかりませんでした。 これは、ストアが空の場合、または関数がストアのリストの末尾に達した場合に発生します。 |
注釈
返されたポインターは、後続の呼び出しで 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 |
こちらもご覧ください
CertDeleteCertificateFromStore
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示