CERT_CHAIN_FIND_ISSUER_PARA 結構 (wincrypt.h)
CERT_CHAIN_FIND_BY_ISSUER_PARA 結構包含 CertFindChainInStore 函式中用來建置憑證鏈結的資訊。
語法
typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
DWORD cbSize;
LPCSTR pszUsageIdentifier;
DWORD dwKeySpec;
DWORD dwAcquirePrivateKeyFlags;
DWORD cIssuer;
CERT_NAME_BLOB *rgIssuer;
PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
void *pvFindArg;
DWORD *pdwIssuerChainIndex;
DWORD *pdwIssuerElementIndex;
} CERT_CHAIN_FIND_ISSUER_PARA, *PCERT_CHAIN_FIND_ISSUER_PARA, CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
成員
cbSize
包含這個結構的大小,以位元組為單位。 此大小不應硬式編碼。 它應該使用 sizeof 運算符在編譯時期設定,如下列範例所示。
CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
findParams.cbSize = sizeof(CERT_CHAIN_FIND_BY_ISSUER_PARA);
pszUsageIdentifier
Null 終止 ANSI 字串的指標,其中包含要比對的使用標識符。 如果此成員為 NULL,則具有任何使用方式的憑證可以是相符專案。
dwKeySpec
包含要比對的索引鍵規格值。 這可以是下列其中一個值。 如果此參數為零,則任何憑證都可以比對。
值 | 意義 |
---|---|
|
根據演算法,金鑰可用來加密或簽署。 |
|
金鑰可用於簽署。 |
dwAcquirePrivateKeyFlags
當 CertFindChainInStore 函式的 dwFindFlags 參數包含CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG時,會呼叫 CryptAcquireCertificatePrivateKey 函式來執行公鑰比較。 在此情況下,此成員會當做 CryptAcquireCertificatePrivateKey 函式的 dwFlags 參數傳遞。 如需此成員及其意義可能的值,請參閱 CryptAcquireCertificatePrivateKey 函式的 dwFlags 參數。
cIssuer
包含 rgIssuer 陣列中的項目數目。 如果這個成員為零,則任何簽發者都可以是相符專案。
rgIssuer
X.509 的陣列,抽象語法表示法一 (ASN.1) 編碼的簽發者名稱 BLOB 相符。 如果此成員為 NULL 或回呼函式傳回 TRUE,則會將新的元素新增至具有具有指定 KeySpec 私鑰且增強金鑰使用方式的憑證鏈結。
pfnFindCallback
CertChainFindByIssuerCallback 回呼函式的指標,可讓應用程式篩選建立鏈結的憑證。 如果此成員為 NULL,則會針對找到的每個憑證建置鏈結。 如果這個成員不是 NULL,則會根據回呼函式的傳回值,為找到的憑證建置鏈結。
pvFindArg
應用程式定義的值,會當做這個結構的 pfnFindCallback 成員所指向之 CertChainFindByIssuerCallback 回呼函式的 pvFindArg 參數傳遞。
pdwIssuerChainIndex
DWORD 值的指標,這個值會接收符合簽發者之鏈結之以零起始的索引。 如果這個成員是 NULL,則不會使用它。
如果 cIssuer 為零,則不會使用此成員。
只有在定義 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS 宏時,才會定義這個成員。
pdwIssuerElementIndex
DWORD 值的指標,這個值會接收簽發者憑證鏈結中專案之以零起始的索引。 如果這個成員是 NULL,則不會使用它。
如果 cIssuer 為零,則不會使用此成員。
這個成員會設定為所找到憑證的索引加上一個,以提供簽發者憑證的索引。 因此,部分鏈結或符合 BLOB 名稱的自我簽署憑證可能會導致 pdwIssuerElementIndex 指向鏈結中最後一個憑證。 藉由比較 pdwIssuerElementIndex 的內容與 CERT_SIMPLE_CHAIN 結構的 cElement 成員,以確定索引有效,即可偵測到這種情況。
只有在定義 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS 宏時,才會定義這個成員。
備註
只有在定義CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS宏時,才能使用 pdwIssuerChainIndex 和 pdwIssuerElementIndex 成員。 如果定義 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS 宏,應用程式必須將所有未使用的欄位初始化為零。
範例
下列虛擬程式代碼示範如何使用這個結構的 pdwIssuerChainIndex 和 pdwIssuerElementIndex 成員來存取簽發者的憑證。
CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
PCCERT_CHAIN_CONTEXT pChainContext = NULL;
DWORD dwChainIndex = 0;
DWORD dwElementIndex = 0;
findParams.pdwIssuerChainIndex = &dwChainIndex;
findParams.pdwIssuerElementIndex = &dwElementIndex;
pChainContext = CertFindChainInStore(
hCertStore,
X509_ASN_ENCODING,
0,
CERT_CHAIN_FIND_BY_ISSUER,
(LPVOID)&findParams,
NULL);
if(pChainContext)
{
// Make sure the element index is valid.
if(dwElementIndex < pChainContext->
rgpChain[dwChainIndex]->cElement)
{
PCERT_CHAIN_ELEMENT pIssuerElement;
pIssuerElement = pChainContext->
rgpChain[dwChainIndex]->rgpElement[dwElementIndex];
// ...
}
// Free the certificate chain.
CertFreeCertificateChain(pChainContext);
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
標頭 | wincrypt.h |