Función CertCloseStore (wincrypt.h)

La función CertCloseStore cierra un identificador de almacén de certificados y reduce el recuento de referencias en el almacén. Debe haber una llamada correspondiente a CertCloseStore para cada llamada correcta a las funciones CertOpenStore o CertDuplicateStore .

Sintaxis

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

Parámetros

[in] hCertStore

Identificador del almacén de certificados que se va a cerrar.

[in] dwFlags

Normalmente, este parámetro usa el valor predeterminado cero. El valor predeterminado es cerrar el almacén con memoria restante asignada para los contextos que no se han liberado. En este caso, no se realiza ninguna comprobación para determinar si la memoria de los contextos permanece asignada.

Las marcas establecidas pueden forzar la liberación de memoria para todos los certificados de un almacén, la lista de revocación de certificados (CRL) y los contextos de lista de confianza de certificados (CTL) cuando se cierra el almacén. También se pueden establecer marcas que comprueben si se han liberado todos los contextos de certificado, CRL y CTL del almacén. Se definen los valores siguientes.

Valor Significado
CERT_CLOSE_STORE_CHECK_FLAG
Comprueba si hay contextos de certificado, CRL y CTL no frecuente. Un código de error devuelto indica que uno o varios elementos de almacén siguen en uso. Esta marca solo se debe usar como herramienta de diagnóstico en el desarrollo de aplicaciones.
CERT_CLOSE_STORE_FORCE_FLAG
Fuerza la liberación de memoria para todos los contextos asociados al almacén. Esta marca solo se puede usar de forma segura cuando el almacén se abre en una función y ni el identificador de almacén ni ninguno de sus contextos se pasan a ninguna función llamada. Para conocer más detalles, vea la sección Comentarios.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es TRUE.

Si se produce un error en la función, el valor devuelto es FALSE. Para obtener información de error extendida, llame a GetLastError.

Si no se establece CERT_CLOSE_STORE_CHECK_FLAG o si se establece y se liberan todos los contextos asociados al almacén, el valor devuelto es TRUE.

Si CERT_CLOSE_STORE_CHECK_FLAG se establece y la memoria de uno o varios contextos asociados al almacén permanece asignado, el valor devuelto es FALSE. El almacén siempre se cierra incluso cuando la función devuelve FALSE. Para conocer más detalles, vea la sección Comentarios.

GetLastError se establece en CRYPT_E_PENDING_CLOSE si la memoria de los contextos asociados al almacén permanece asignado. Cualquier valor existente devuelto por GetLastError se conserva a menos que se establezca CERT_CLOSE_STORE_CHECK_FLAG.

Comentarios

Mientras un almacén de certificados está abierto, los contextos de ese almacén se pueden recuperar o duplicar. Cuando se recupera o se duplica un contexto , se incrementa su recuento de referencias. Cuando un contexto se libera pasando a una función de búsqueda o enumeración como contexto anterior o mediante CertFreeCertificateContext, CertFreeCRLContext o CertFreeCTLContext, su recuento de referencias se reduce. Cuando el recuento de referencias de un contexto alcanza cero, la memoria asignada para ese contexto se libera automáticamente. Cuando se ha liberado la memoria asignada para un contexto, los punteros a ese contexto no son válidos.

De forma predeterminada, la memoria usada para almacenar contextos con recuento de referencias mayor que cero no se libera cuando se cierra un almacén de certificados. Las referencias a esos contextos siguen siendo válidas; sin embargo, esto puede provocar pérdidas de memoria. Además, los cambios realizados en las propiedades de un contexto después de cerrar el almacén no se conservan.

Para forzar la liberación de memoria para todos los contextos asociados a un almacén, establezca CERT_CLOSE_STORE_FORCE_FLAG. Con este conjunto de marcas, la memoria de todos los contextos asociados al almacén se libera y todos los punteros a los contextos de certificado, CRL o CTL asociados al almacén no son válidos. Esta marca solo se debe establecer cuando el almacén se abre en una función y ni el identificador de almacén ni ninguno de sus contextos se pasaron nunca a ninguna función llamada.

El estado de los recuentos de referencia en contextos asociados a un almacén se puede comprobar cuando se cierra el almacén mediante CERT_CLOSE_STORE_CHECK_FLAG. Cuando se establece esta marca y no se han liberado todos los contextos de certificado, CRL o CTL, la función devuelve FALSE y GetLastError devuelve CRYPT_E_PENDING_CLOSE. Tenga en cuenta que el almacén sigue cerrado cuando se devuelve FALSE y que la memoria de los contextos activos no se libera.

Si no se estableció CERT_STORE_NO_CRYPT_RELEASE_FLAG cuando se abrió el almacén, al cerrar un almacén se libera su identificador de CSP.

Requisitos

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

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

Funciones del almacén de certificados

CryptReleaseContext