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來釋放指標。 傳遞至
呼叫 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 |
另請參閱
CertDeleteCertificateFromStore