共用方式為


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 的非NULLpPrevCertCon text,即使發生錯誤,仍會一律釋放。

呼叫 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

憑證函式