Função CertGetIssuerCertificateFromStore (wincrypt.h)

A função CertGetIssuerCertificateFromStore recupera o contexto do certificado do repositório de certificados para o primeiro ou próximo emissor do certificado de entidade especificado. As novas funções de verificação da cadeia de certificados são recomendadas em vez do uso dessa função.

Sintaxe

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 um repositório de certificados.

[in] pSubjectContext

Um ponteiro para uma estrutura CERT_CONTEXT que contém as informações do assunto. Esse parâmetro pode ser obtido de qualquer repositório de certificados ou pode ser criado pelo aplicativo de chamada usando a função CertCreateCertificateContext .

[in, optional] pPrevIssuerContext

Um ponteiro para uma estrutura CERT_CONTEXT que contém as informações do emissor. Um emissor pode ter vários certificados, especialmente quando um período de validade está prestes a ser alterado. Esse parâmetro deve ser NULL na chamada para obter o primeiro certificado do emissor. Para obter o próximo certificado para o emissor, defina pPrevIssuerContext como a estrutura CERT_CONTEXT retornada pela chamada anterior.

Essa função libera o CERT_CONTEXT referenciado por valores não NULL desse parâmetro.

[in, out] pdwFlags

Os sinalizadores a seguir habilitam verificações de verificação no certificado retornado. Eles podem ser combinados usando uma operação OR bit a bit para habilitar várias verificações.

Valor Significado
CERT_STORE_NO_CRL_FLAG
Indica que nenhuma CRL correspondente foi encontrada.
CERT_STORE_NO_ISSUER_FLAG
Indica que nenhum certificado do emissor foi encontrado.
CERT_STORE_REVOCATION_FLAG
Verifica se o certificado de entidade está na lista de revogação do emissor.
CERT_STORE_SIGNATURE_FLAG
Usa a chave pública no certificado do emissor para verificar a assinatura no certificado da entidade.
CERT_STORE_TIME_VALIDITY_FLAG
Obtém a hora atual e verifica se ela está dentro do período de validade do certificado de entidade.
 

Se uma verificação marcar de um tipo habilitado for bem-sucedida, seu sinalizador será definido como zero. Se falhar, seu sinalizador permanecerá definido no retorno. Para CERT_STORE_REVOCATION_FLAG, a verificação terá êxito se a função não encontrar uma CRL relacionada ao certificado da entidade.

Se CERT_STORE_REVOCATION_FLAG estiver definido e o emissor não tiver uma CRL no repositório, CERT_STORE_NO_CRL_FLAG será definido e CERT_STORE_REVOCATION_FLAG permanecerá definido.

Se CERT_STORE_SIGNATURE_FLAG ou CERT_STORE_REVOCATION_FLAG estiver definido, CERT_STORE_NO_ISSUER_FLAG será definido se a função não encontrar um certificado do emissor no repositório. Para obter mais detalhes, confira Comentários.

No caso de uma falha de marcar de verificação, um ponteiro para o CERT_CONTEXT do emissor ainda é retornado e GetLastError não é atualizado.

Valor retornado

Se a função for bem-sucedida, o valor retornado será um ponteiro para um emissor somente leitura CERT_CONTEXT.

Se a função falhar e o primeiro ou o próximo certificado do emissor não for encontrado, o valor retornado será NULL.

Somente a última estrutura de CERT_CONTEXT retornada deve ser liberada chamando CertFreeCertificateContext. Quando o CERT_CONTEXT retornado de uma chamada para a função é fornecido como o parâmetro pPrevIssuerContext em uma chamada subsequente, o contexto é liberado como parte da ação da função.

Para obter informações de erro estendidas, chame GetLastError. Alguns códigos de erro possíveis seguem.

Código de retorno Descrição
CRYPT_E_NOT_FOUND
Nenhum emissor foi encontrado para o certificado da entidade.
CRYPT_E_SELF_SIGNED
O certificado do emissor é o mesmo que o certificado da entidade. É um certificado raiz autoassinado.
E_INVALIDARG
O identificador no parâmetro hCertStore não é igual ao do contexto de certificado apontado pelo parâmetro pPrevIssuerContext ou um sinalizador sem suporte foi definido em pdwFlags.

Comentários

O ponteiro retornado é liberado quando passado como o parâmetro pPrevIssuerContext em uma chamada subsequente para a função. Caso contrário, o ponteiro deve ser liberado explicitamente chamando CertFreeCertificateContext. Um pPrevIssuerContext que não é NULL é sempre liberado por CertGetIssuerCertificateFromStore usando uma chamada para CertFreeCertificateContext, mesmo que haja um erro na função.

CertDuplicateCertificateContext pode ser chamado para tornar uma duplicata do certificado do emissor.

Os valores hexadecimal para dwFlags podem ser combinados usando uma operação or bit a bit para habilitar várias verificações. Por exemplo, para habilitar a validade de assinatura e de tempo, o valor 0x00000003 é passado em dwFlags na entrada. Nesse caso, se CERT_STORE_SIGNATURE_FLAG verificação for bem-sucedida, mas CERT_STORE_TIME_VALIDITY_FLAG verificação falhar, dwFlags retornará como 0x00000002 na saída.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

Funções de certificado