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.
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 |