estructura CERT_CHAIN_FIND_ISSUER_PARA (wincrypt.h)

La estructura CERT_CHAIN_FIND_BY_ISSUER_PARA contiene información utilizada en la función CertFindChainInStore para crear cadenas de certificados.

Sintaxis

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;

Miembros

cbSize

Contiene el tamaño de esta estructura, en bytes. Este tamaño no debe codificarse de forma rígida. Debe establecerse en tiempo de compilación mediante el operador sizeof , como se muestra en el ejemplo siguiente.

CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
findParams.cbSize = sizeof(CERT_CHAIN_FIND_BY_ISSUER_PARA);

pszUsageIdentifier

Puntero a una cadena ANSI terminada en null que contiene el identificador de uso que se va a hacer coincidir. Si este miembro es NULL, un certificado con cualquier uso puede ser una coincidencia.

dwKeySpec

Contiene el valor de especificación de clave que se va a buscar. Puede ser uno de los valores siguientes. Si este parámetro es cero, cualquier certificado puede coincidir.

Valor Significado
AT_KEYEXCHANGE
0x01
La clave se puede usar para cifrar o firmar en función del algoritmo.
AT_SIGNATURE
0x02
La clave se puede usar para firmar.

dwAcquirePrivateKeyFlags

Cuando el parámetro dwFindFlags de la función CertFindChainInStore contiene CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG, se llama a la función CryptAcquireCertificatePrivateKey para realizar la comparación de claves públicas. En este caso, este miembro se pasa como el parámetro dwFlags de la función CryptAcquireCertificatePrivateKey . Para conocer los valores posibles para este miembro y sus significados, consulte el parámetro dwFlags de la función CryptAcquireCertificatePrivateKey .

cIssuer

Contiene el número de elementos de la matriz rgIssuer . Si este miembro es cero, cualquier emisor puede ser una coincidencia.

rgIssuer

Matriz de blobs con nombre de emisor codificados X.509, notación de sintaxis abstracta uno (ASN.1) para que coincidan. Si este miembro es NULL o la función de devolución de llamada devuelve TRUE, se agrega un nuevo elemento a la cadena para el certificado que tiene una clave privada con el keySpec especificado y el uso mejorado de la clave.

pfnFindCallback

Puntero a una función de devolución de llamada CertChainFindByIssuerCallback que permite a la aplicación filtrar los certificados para los que se crean las cadenas. Si este miembro es NULL, se crea una cadena para cada certificado encontrado. Si este miembro no es NULL, se creará una cadena para el certificado encontrado en función del valor devuelto de la función de devolución de llamada.

pvFindArg

Valor definido por la aplicación que se pasará como parámetro pvFindArg de la función de devolución de llamada CertChainFindByIssuerCallback a la que apunta el miembro pfnFindCallback de esta estructura.

pdwIssuerChainIndex

Puntero a un valor DWORD que recibe el índice de base cero de la cadena que coincide con el emisor. Si este miembro es NULL, no se usa.

Si cIssuer es cero, no se usa este miembro.

Este miembro solo se define si se define la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS .

pdwIssuerElementIndex

Puntero a un valor DWORD que recibe el índice de base cero del elemento en la cadena del certificado del emisor. Si este miembro es NULL, no se usa.

Si cIssuer es cero, no se usa este miembro.

Este miembro se establece en el índice del certificado encontrado más uno para proporcionar el índice del certificado del emisor. Por este motivo, una cadena parcial o un certificado autofirmado que coincida con el nombre BLOB puede hacer que pdwIssuerElementIndex apunte más allá del último certificado de la cadena. Esta situación se puede detectar comparando el contenido de pdwIssuerElementIndex con el miembro cElement de la estructura CERT_SIMPLE_CHAIN para asegurarse de que el índice es válido.

Este miembro solo se define si se define la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS .

Comentarios

Los miembros pdwIssuerChainIndex y pdwIssuerElementIndex solo están disponibles si se define la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS . Si se define la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS , la aplicación debe inicializar todos los campos sin usar en cero.

Ejemplos

El pseudocódigo siguiente muestra cómo usar los miembros pdwIssuerChainIndex y pdwIssuerElementIndex de esta estructura para tener acceso al certificado del emisor.

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);
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado wincrypt.h

Consulte también

CertChainFindByIssuerCallback

CertFindChainInStore

CryptAcquireCertificatePrivateKey