Função CertAddCertificateContextToStore (wincrypt.h)

A função CertAddCertificateContextToStore adiciona um contexto de certificado ao repositório de certificados.

Sintaxe

BOOL CertAddCertificateContextToStore(
  [in]            HCERTSTORE     hCertStore,
  [in]            PCCERT_CONTEXT pCertContext,
  [in]            DWORD          dwAddDisposition,
  [out, optional] PCCERT_CONTEXT *ppStoreContext
);

Parâmetros

[in] hCertStore

Identificador de um repositório de certificados.

[in] pCertContext

Um ponteiro para a estrutura CERT_CONTEXT a ser adicionada ao repositório.

[in] dwAddDisposition

Especifica a ação a ser tomada se um certificado correspondente ou um link para um certificado correspondente já existir no repositório. Os valores de disposição definidos no momento e seus usos são os seguintes.

Valor Significado
CERT_STORE_ADD_ALWAYS
A função não faz marcar para um certificado correspondente existente ou um link para um certificado correspondente. Um novo certificado sempre é adicionado ao repositório. Isso pode levar a duplicatas em um repositório.
CERT_STORE_ADD_NEW
Se existir um certificado correspondente ou um link para um certificado correspondente, a operação falhará. GetLastError retorna o código CRYPT_E_EXISTS.
CERT_STORE_ADD_NEWER
Se existir um certificado correspondente ou um link para um certificado correspondente e o tempo NotBefore do contexto existente for igual ou maior que o tempo NotBefore do novo contexto que está sendo adicionado, a operação falhará e GetLastError retornará o código CRYPT_E_EXISTS.

Se o tempo NotBefore do contexto existente for menor que o tempo NotBefore do novo contexto que está sendo adicionado, o certificado ou link existente será excluído e um novo certificado será criado e adicionado ao repositório. Se um certificado correspondente ou um link para um certificado correspondente não existir, um novo link será adicionado.

Se as CRLs ( listas de certificados revogados ) ou a CTLs ( lista de certificados confiáveis ) estiverem sendo comparadas, o tempo ThisUpdate será usado.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Se existir um certificado correspondente ou um link para um certificado correspondente e o tempo NotBefore do contexto existente for igual ou maior que o tempo NotBefore do novo contexto que está sendo adicionado, a operação falhará e GetLastError retornará o código CRYPT_E_EXISTS.

Se o tempo NotBefore do contexto existente for menor que o tempo NotBefore do novo contexto que está sendo adicionado, o contexto existente será excluído antes de criar e adicionar o novo contexto. O novo contexto adicionado herda propriedades do certificado existente.

Se CRLs ou CTLs estiverem sendo comparadas, o tempo ThisUpdate será usado.

CERT_STORE_ADD_REPLACE_EXISTING
Se existir um link para um certificado correspondente, esse certificado ou link existente será excluído e um novo certificado será criado e adicionado ao repositório. Se um certificado correspondente ou um link para um certificado correspondente não existir, um novo link será adicionado.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Se existir um certificado correspondente no repositório, o contexto existente não será substituído. O contexto existente herda propriedades do novo certificado.
CERT_STORE_ADD_USE_EXISTING
Se existir um certificado correspondente ou um link para um certificado correspondente, esse certificado ou link existente será usado e as propriedades do novo certificado serão adicionadas. A função não falha, mas não adiciona um novo contexto. Se pCertContext não for NULL, o contexto existente será duplicado.

Se um certificado correspondente ou um link para um certificado correspondente não existir, um novo certificado será adicionado.

[out, optional] ppStoreContext

Um ponteiro para um ponteiro para a cópia a ser feita do certificado que foi adicionado ao repositório.

O parâmetro ppStoreContext pode ser NULL, indicando que o aplicativo de chamada não requer uma cópia do certificado adicionado. Se uma cópia for feita, ela deverá ser liberada usando CertFreeCertificateContext.

Retornar valor

Se a função for bem-sucedida, o valor retornado será TRUE.

Se a função falhar, o valor retornado será FALSE. 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_EXISTS
Esse valor será retornado se CERT_STORE_ADD_NEW estiver definido e o certificado já existir no repositório ou se CERT_STORE_ADD_NEWER estiver definido e existir um certificado no repositório com uma data NotBefore maior ou igual à data NotBefore no certificado a ser adicionado.
E_INVALIDARG
Um valor de disposição que não é válido foi especificado no parâmetro dwAddDisposition .
 

Erros das funções chamadas , CertAddEncodedCertificateToStore e CertSetCertificateContextProperty, podem ser propagados para essa função.

Comentários

O contexto do certificado não é duplicado usando CertDuplicateCertificateContext. Em vez disso, a função cria uma nova cópia do contexto e a adiciona ao repositório.

Além do certificado codificado, CertDuplicateCertificateContext também copia as propriedades do contexto, com exceção das propriedades CERT_KEY_PROV_HANDLE_PROP_ID e CERT_KEY_CONTEXT_PROP_ID.

Para remover o contexto do certificado do repositório de certificados, use a função CertDeleteCertificateFromStore .

Nota A ordem do contexto do certificado pode não ser preservada dentro do repositório. Para acessar um certificado específico, você deve iterar entre os certificados no repositório.
 

Requisitos

Requisito Valor
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

CertAddEncodedCertificateToStore

CertSetCertificateContextProperty

Funções de certificado