Compartilhar via


Função CertCloseStore (wincrypt.h)

A função CertCloseStore fecha um identificador de repositório de certificados e reduz a contagem de referência no repositório. É necessário que haja uma chamada correspondente para CertCloseStore para cada chamada bem-sucedida para as funções CertOpenStore ou CertDuplicateStore .

Sintaxe

BOOL CertCloseStore(
  [in] HCERTSTORE hCertStore,
  [in] DWORD      dwFlags
);

Parâmetros

[in] hCertStore

Identificador do repositório de certificados a ser fechado.

[in] dwFlags

Normalmente, esse parâmetro usa o valor padrão zero. O padrão é fechar o repositório com a memória restante alocada para contextos que não foram liberados. Nesse caso, nenhuma marcar é feita para determinar se a memória para contextos permanece alocada.

Os sinalizadores de conjunto podem forçar a liberação de memória para todos os contextos de certificado, CRL ( lista de revogação de certificados ) e CTL ( lista de certificados ) quando o repositório é fechado. Os sinalizadores também podem ser definidos marcar se todos os contextos de certificado, CRL e CTL do repositório foram liberados. Os valores a seguir são definidos.

Valor Significado
CERT_CLOSE_STORE_CHECK_FLAG
Verifica se há contextos de certificado, CRL e CTL não acessados. Um código de erro retornado indica que um ou mais elementos de repositório ainda estão em uso. Esse sinalizador só deve ser usado como uma ferramenta de diagnóstico no desenvolvimento de aplicativos.
CERT_CLOSE_STORE_FORCE_FLAG
Força a liberação de memória para todos os contextos associados ao repositório. Esse sinalizador só pode ser usado com segurança quando o repositório é aberto em uma função e nem o identificador do repositório nem qualquer um de seus contextos são passados para qualquer função chamada. Para obter detalhes, consulte Observações.

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.

Se CERT_CLOSE_STORE_CHECK_FLAG não estiver definido ou se estiver definido e todos os contextos associados ao repositório tiverem sido liberados, o valor retornado será TRUE.

Se CERT_CLOSE_STORE_CHECK_FLAG estiver definido e a memória de um ou mais contextos associados ao repositório permanecer alocada, o valor retornado será FALSE. O repositório sempre é fechado mesmo quando a função retorna FALSE. Para obter detalhes, consulte Observações.

GetLastError será definido como CRYPT_E_PENDING_CLOSE se a memória para contextos associados ao repositório permanecer alocada. Qualquer valor existente retornado por GetLastError é preservado, a menos que CERT_CLOSE_STORE_CHECK_FLAG esteja definido.

Comentários

Enquanto um repositório de certificados está aberto, os contextos desse repositório podem ser recuperados ou duplicados. Quando um contexto é recuperado ou duplicado, sua contagem de referência é incrementada. Quando um contexto é liberado passando-o para uma função de pesquisa ou enumeração como um contexto anterior ou usando CertFreeCertificateContext, CertFreeCRLContext ou CertFreeCTLContext, sua contagem de referência é decrementada. Quando a contagem de referência de um contexto atinge zero, a memória alocada para esse contexto é liberada automaticamente. Quando a memória alocada para um contexto é liberada, todos os ponteiros para esse contexto se tornam inválidos.

Por padrão, a memória usada para armazenar contextos com contagem de referência maior que zero não é liberada quando um repositório de certificados é fechado. As referências a esses contextos permanecem válidas; no entanto, isso pode causar vazamentos de memória. Além disso, as alterações feitas nas propriedades de um contexto após o fechamento do repositório não são persistentes.

Para forçar a liberação de memória para todos os contextos associados a um repositório, defina CERT_CLOSE_STORE_FORCE_FLAG. Com esse conjunto de sinalizadores, a memória para todos os contextos associados ao repositório é liberada e todos os ponteiros para contextos de certificado, CRL ou CTL associados ao repositório se tornam inválidos. Esse sinalizador só deve ser definido quando o repositório é aberto em uma função e nem o identificador do repositório nem qualquer um de seus contextos foram passados para qualquer função chamada.

O status de contagens de referência em contextos associados a um repositório pode ser verificado quando o repositório é fechado usando CERT_CLOSE_STORE_CHECK_FLAG. Quando esse sinalizador é definido e todos os contextos de certificado, CRL ou CTL não foram liberados, a função retorna FALSE e GetLastError retorna CRYPT_E_PENDING_CLOSE. Observe que o repositório ainda está fechado quando FALSE é retornado e a memória de qualquer contexto ativo não é liberada.

Se CERT_STORE_NO_CRYPT_RELEASE_FLAG não foi definido quando o repositório foi aberto, fechar um repositório liberará seu identificador CSP.

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

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

Certopenstore

Funções de repositório de certificados

CryptReleaseContext