Función CertGetIssuerCertificateFromStore (wincrypt.h)

La función CertGetIssuerCertificateFromStore recupera el contexto del certificado del almacén de certificados para el primer o siguiente emisor del certificado de sujeto especificado. Se recomiendan las nuevas funciones de comprobación de la cadena de certificados en lugar del uso de esta función.

Sintaxis

PCCERT_CONTEXT CertGetIssuerCertificateFromStore(
  [in]           HCERTSTORE     hCertStore,
  [in]           PCCERT_CONTEXT pSubjectContext,
  [in, optional] PCCERT_CONTEXT pPrevIssuerContext,
  [in, out]      DWORD          *pdwFlags
);

Parámetros

[in] hCertStore

Identificador de un almacén de certificados.

[in] pSubjectContext

Puntero a una estructura de CERT_CONTEXT que contiene la información del asunto. Este parámetro se puede obtener de cualquier almacén de certificados o se puede crear mediante la aplicación que realiza la llamada mediante la función CertCreateCertificateContext .

[in, optional] pPrevIssuerContext

Puntero a una estructura de CERT_CONTEXT que contiene la información del emisor. Un emisor puede tener varios certificados, especialmente cuando un período de validez está a punto de cambiar. Este parámetro debe ser NULL en la llamada para obtener el primer certificado del emisor. Para obtener el siguiente certificado para el emisor, establezca pPrevIssuerContext en la estructura CERT_CONTEXT devuelta por la llamada anterior.

Esta función libera el CERT_CONTEXT al que hacen referencia los valores no NULL de este parámetro.

[in, out] pdwFlags

Las marcas siguientes habilitan las comprobaciones de comprobación en el certificado devuelto. Se pueden combinar mediante una operación OR bit a bit para habilitar varias comprobaciones.

Valor Significado
CERT_STORE_NO_CRL_FLAG
Indica que no se encontró ninguna CRL coincidente.
CERT_STORE_NO_ISSUER_FLAG
Indica que no se encontró ningún certificado de emisor.
CERT_STORE_REVOCATION_FLAG
Comprueba si el certificado del firmante está en la lista de revocación del emisor.
CERT_STORE_SIGNATURE_FLAG
Usa la clave pública en el certificado del emisor para comprobar la firma en el certificado del firmante.
CERT_STORE_TIME_VALIDITY_FLAG
Obtiene la hora actual y comprueba que se encuentra dentro del período de validez del certificado del firmante.
 

Si una comprobación de un tipo habilitado se realiza correctamente, su marca se establece en cero. Si se produce un error, su marca permanece establecida tras la devolución. Para CERT_STORE_REVOCATION_FLAG, la comprobación se realiza correctamente si la función no encuentra una CRL relacionada con el certificado del firmante.

Si se establece CERT_STORE_REVOCATION_FLAG y el emisor no tiene una CRL en el almacén, CERT_STORE_NO_CRL_FLAG se establece y CERT_STORE_REVOCATION_FLAG permanece establecido.

Si se establece CERT_STORE_SIGNATURE_FLAG o CERT_STORE_REVOCATION_FLAG, CERT_STORE_NO_ISSUER_FLAG se establece si la función no encuentra un certificado de emisor en el almacén. Para obtener más información, consulte Comentarios.

En el caso de un error de comprobación de comprobación, todavía se devuelve un puntero al CERT_CONTEXT del emisor y No se actualiza GetLastError .

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un puntero a un emisor de solo lectura CERT_CONTEXT.

Si se produce un error en la función y no se encuentra el primer o siguiente certificado del emisor, el valor devuelto es NULL.

Solo se debe liberar la última estructura de CERT_CONTEXT devuelta llamando a CertFreeCertificateContext. Cuando el CERT_CONTEXT devuelto de una llamada a la función se proporciona como parámetro pPrevIssuerContext en una llamada posterior, el contexto se libera como parte de la acción de la función.

Para obtener información de error extendida, llame a GetLastError. Siguen algunos códigos de error posibles.

Código devuelto Descripción
CRYPT_E_NOT_FOUND
No se encontró ningún emisor para el certificado del firmante.
CRYPT_E_SELF_SIGNED
El certificado del emisor es el mismo que el certificado del firmante. Es un certificado raíz autofirmado.
E_INVALIDARG
El identificador del parámetro hCertStore no es el mismo que el del contexto de certificado al que apunta el parámetro pPrevIssuerContext o se estableció una marca no admitida en pdwFlags.

Comentarios

El puntero devuelto se libera cuando se pasa como parámetro pPrevIssuerContext en una llamada posterior a la función. De lo contrario, el puntero debe liberarse explícitamente llamando a CertFreeCertificateContext. CertGetIssuerFromStore libera siempre un pPrevIssuerContext que no es NULL mediante una llamada a CertFreeCertificateContext, incluso si hay un error en la función.

Se puede llamar a CertDuplicateCertificateContext para hacer un duplicado del certificado del emisor.

Los valores hexadecimales de dwFlags se pueden combinar mediante una operación OR bit a bit para habilitar varias comprobaciones. Por ejemplo, para habilitar la validez de firma y hora, el valor 0x00000003 se pasa en dwFlags en la entrada. En este caso, si CERT_STORE_SIGNATURE_FLAG comprobación se realiza correctamente, pero CERT_STORE_TIME_VALIDITY_FLAG se produce un error en la comprobación, dwFlags devuelve como 0x00000002 en la salida.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

Funciones de certificado