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
照合するキー指定値を格納します。 これには、次のいずれかの値を指定できます。 このパラメーターが 0 の場合、任意の証明書が一致する可能性があります。
値 | 意味 |
---|---|
|
キーは、アルゴリズムに応じて暗号化または署名に使用できます。 |
|
キーは署名に使用できます。 |
dwAcquirePrivateKeyFlags
CertFindChainInStore 関数の dwFindFlags パラメーターにCERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAGが含まれている場合、公開キーの比較を行うために CryptAcquireCertificatePrivateKey 関数が呼び出されます。 この場合、このメンバーは CryptAcquireCertificatePrivateKey 関数の dwFlags パラメーターとして渡されます。 このメンバーに使用できる値とその意味については、CryptAcquireCertificatePrivateKey 関数の dwFlags パラメーターを参照してください。
cIssuer
rgIssuer 配列内の要素の数を格納します。 このメンバーが 0 の場合、すべての発行者が一致する可能性があります。
rgIssuer
一致する X.509抽象構文表記 1 (ASN.1) エンコードされた発行者名 BLOB の 配列。 このメンバーが NULL であるか、コールバック関数が TRUE を返す場合、指定された KeySpec と拡張キー使用法を持つ 秘密キー を持つ証明書のチェーン に新しい要素が追加されます。
pfnFindCallback
チェーンが作成される証明書をアプリケーションでフィルター処理できるようにする CertChainFindByIssuerCallback コールバック関数へのポインター。 このメンバーが NULL の場合、検出されたすべての証明書に対してチェーンが構築されます。 このメンバーが NULL でない場合、コールバック関数の戻り値に基づいて、検出された証明書のチェーンが作成されます。
pvFindArg
この構造体の pfnFindCallback メンバーが指す CertChainFindByIssuerCallback コールバック関数の pvFindArg パラメーターとして渡されるアプリケーション定義値。
pdwIssuerChainIndex
発行者と一致するチェーンの 0 から始まるインデックスを受け取る DWORD 値へのポインター。 このメンバーが NULL の場合は使用されません。
cIssuer が 0 の場合、このメンバーは使用されません。
このメンバーは、 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合にのみ定義されます。
pdwIssuerElementIndex
発行者の証明書のチェーン内の要素の 0 から始まるインデックスを受け取る DWORD 値へのポインター。 このメンバーが NULL の場合は使用されません。
cIssuer が 0 の場合、このメンバーは使用されません。
このメンバーは、検出された証明書のインデックスに加えて、発行者の証明書のインデックスを提供するために 1 つに設定されます。 このため、BLOB という名前に一致する部分的なチェーンまたは自己署名証明書によって 、pdwIssuerElementIndex が チェーン内の最後の証明書をポイントする可能性があります。 この状況を検出するには、pdwIssuerElementIndex の内容とCERT_SIMPLE_CHAIN構造体の cElement メンバーを比較して、インデックスが有効であることを確認します。
このメンバーは、 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合にのみ定義されます。
注釈
pdwIssuerChainIndex および pdwIssuerElementIndex メンバーは、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 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 (デスクトップ アプリのみ) |
Header | wincrypt.h |