Función CertOpenStore (wincrypt.h)

La función CertOpenStore abre un almacén de certificados mediante un tipo de proveedor de almacén especificado. Aunque esta función puede abrir un almacén de certificados para la mayoría de los propósitos, se recomienda CertOpenSystemStore para abrir los almacenes de certificados más comunes. CertOpenStore es necesario para opciones más complejas y casos especiales.

Sintaxis

HCERTSTORE CertOpenStore(
  [in] LPCSTR            lpszStoreProvider,
  [in] DWORD             dwEncodingType,
  [in] HCRYPTPROV_LEGACY hCryptProv,
  [in] DWORD             dwFlags,
  [in] const void        *pvPara
);

Parámetros

[in] lpszStoreProvider

Puntero a una cadena ANSI terminada en null que contiene el tipo de proveedor de almacén.

Los valores siguientes representan los tipos de almacén predefinidos. El tipo de proveedor de almacén determina el contenido del parámetro pvPara y el uso y significado de la palabra alta del parámetro dwFlags. Se pueden instalar o registrar proveedores de almacenamiento adicionales mediante la función de CryptInstallOIDFunctionAddres s o CryptRegisterOIDFunction. Para obtener más información sobre cómo agregar proveedores de almacén, consulte Extensión de la funcionalidad CertOpenStore.

Valor Significado
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
Abre un almacén que será una colección de otras tiendas. Los almacenes se agregan o quitan de la colección mediante CertAddStoreToCollection y CertRemoveStoreFromCollection. Cuando se agrega un almacén a una colección, todos los certificados, CRL y CCL de ese almacén están disponibles para búsquedas o enumeraciones del almacén de recopilación.

La palabra alta de dwFlags se establece en cero.

valor de pvPara: El parámetro pvPara debe ser NULL.

CERT_STORE_PROV_FILE
Inicializa el almacén con certificados, CRL y CTL leídos desde un archivo abierto especificado. Este proveedor espera que el archivo contenga solo un almacén serializado y no mensajes firmados PKCS #7 o un único certificado codificado.

El puntero de archivo debe colocarse al principio de la información del almacén serializada. Una vez cargados los datos del almacén serializado en el almacén de certificados, el puntero de archivo se coloca al principio de cualquier dato que pueda seguir los datos del almacén serializado en el archivo. Si CERT_FILE_STORE_COMMIT_ENABLE se establece en dwFlags, el identificador de archivo se duplica y el almacén siempre se confirma como un almacén serializado. El archivo no se cierra cuando se cierra el almacén.

valor de pvPara: El parámetro pvPara debe contener un puntero al identificador de un archivo abierto mediante CreateFile.

CERT_STORE_PROV_FILENAME_A
Inicializa el almacén con certificados, CRL y CTL desde un archivo. El proveedor abre el archivo y primero intenta leer el archivo como un almacén serializado, después como un mensaje firmado PKCS #7 y, por último, como un único certificado codificado.

El parámetro dwEncodingType debe contener los tipos de codificación que se usarán con los mensajes y certificados. Si el archivo contiene un certificado codificado X.509, se producirá un error en la operación de apertura y se producirá un error en la llamada a la función GetLastErrorERROR_ACCESS_DENIED. Si la marca CERT_FILE_STORE_COMMIT_ENABLE se establece en dwFlags, el valor dwCreationDisposition pasado a createFile es el siguiente:

  • Si se establece la marca de CERT_STORE_CREATE_NEW_FLAG, CreateFile usa CREATE_NEW.
  • Si se establece la marca de CERT_STORE_OPEN_EXISTING_FLAG, CreateFile usa OPEN_EXISTING.
  • Para todas las demás configuraciones de dwFlags, CreateFile usa OPEN_ALWAYS.

Si dwFlags incluye CERT_FILE_STORE_COMMIT_ENABLE, el archivo se confirma como un almacén PKCS #7 o un almacén serializado en función del tipo de archivo abierto. Si el archivo estaba vacío o si el nombre de archivo tiene una extensión .p7c o .spc, el archivo se confirma como PKCS #7. De lo contrario, el archivo se confirma como un almacén serializado.

valor de pvPara: El parámetro pvPara debe contener un puntero a una cadena ANSI terminada en null que contiene el nombre de un archivo existente sin abrir.

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
Igual que CERT_STORE_PROV_FILENAME_A.

valor de pvPara: El parámetro pvPara debe contener un puntero a una cadena Unicode terminada en null que contiene el nombre de un archivo existente sin abrir.

CERT_STORE_PROV_LDAP(_W)
sz_CERT_STORE_PROV_LDAP(_W)
Inicializa el almacén con certificados, CRL y CCL a partir de los resultados de una consulta LDAP.

Para realizar operaciones de escritura en el almacén, la cadena de consulta debe especificar una consulta BASE sin filtro ni un único atributo.

valor de pvPara: Si el parámetro dwFlags contiene CERT_LDAP_STORE_OPENED_FLAG, establezca pvPara en la dirección de una estructura de CERT_LDAP_STORE_OPENED_PARA que especifica la sesión LDAP establecida que se va a usar.

De lo contrario, establezca pvPara para que apunte a una cadena Unicode terminada en null que contiene la cadena de consulta LDAP. Para obtener más información sobre las cadenas de consulta LDAP, vea dialecto LDAP.

CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY
Crea un almacén de certificados en memoria caché. No hay certificados, listas de revocación de certificados (CRL) o listas de confianza de certificados (CTL) se cargan inicialmente en el almacén. Normalmente se usa para crear un almacén temporal.

Cualquier adición de certificados, CRL o CTL o cambios en las propiedades de certificados, CRL o CTL en un almacén de memoria no se guardan automáticamente. Se pueden guardar en un archivo o en una BLOB de memoria mediante CertSaveStore.

valor de pvPara: No se usa el parámetro pvPara .

CERT_STORE_PROV_MSG
Inicializa el almacén con certificados, CRL y CCL del mensaje criptográfico especificado. El parámetro dwEncodingType debe contener los tipos de codificación usados con los mensajes y certificados.

valor pvPara: El parámetro pvPara contiene un identificador HCRYPTMSG del mensaje codificado, devuelto por una llamada a CryptMsgOpenToDecode.

CERT_STORE_PROV_PHYSICAL(_W)
sz_CERT_STORE_PROV_PHYSICAL(_W)
Inicializa el almacén con certificados, CRL y CTL de un almacén físico especificado que es miembro de un almacén lógico.

Dos nombres se separan con una barra diagonal inversa intermedia (\), por ejemplo "Root.Default". Aquí, "Root" es el nombre del almacén del sistema y ". Default" es el nombre del almacén físico. Los nombres de almacén físico y del sistema no pueden contener barras diagonales inversas. La palabra alta de dwFlags indica la ubicación del almacén del sistema, normalmente CERT_SYSTEM_STORE_CURRENT_USER. Para obtener más información, consulte dwFlags más adelante en este tema y vea Ubicaciones del almacén del sistema. Algunas ubicaciones de almacén físico se pueden abrir de forma remota.

valor de pvPara: El parámetro pvPara apunta a una cadena Unicode terminada en null que contiene tanto el nombre del almacén del sistema como los nombres físicos.

CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7
Inicializa el almacén con certificados, CRL y CCL a partir de un mensaje firmado PKCS #7 codificado. El parámetro dwEncodingType debe especificar los tipos de codificación que se usarán con los mensajes y certificados.

valor de pvPara: El parámetro pvPara apunta a una estructura de CRYPT_DATA_BLOB que representa el mensaje codificado.

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
Inicializa el almacén con el contenido de un paquete de PKCS #12.

Si el paquete PKCS #12 está protegido con una contraseña NULA o vacía, esta función se abrirá correctamente en el almacén.

A partir de Windows 8 y Windows Server 2012, si la contraseña insertada en el paquete PFX se protegió en una entidad de seguridad de Active Directory (AD) y el usuario actual, como miembro de esa entidad de seguridad, tiene permiso para descifrar la contraseña, esta función tendrá éxito al abrir el almacén. Para obtener más información, consulte el parámetro pvPara y la marca PKCS12_PROTECT_TO_DOMAIN_SIDS de la función PFXExportCertStoreEx.

Puedes proteger las contraseñas PFX en una entidad de seguridad de AD a partir de Windows 8 y Windows Server 2012.

valor de pvPara: El parámetro pvPara apunta a una estructura de CRYPT_DATA_BLOB que representa el paquete PKCS #12.

CERT_STORE_PROV_REG
Inicializa el almacén con certificados, CRL y CTL desde una subclave del Registro.

Este proveedor abre o crea las subclaves del Registro Certificados, crLsy CTL bajo la clave pasada en pvPara. El proveedor no cierra la clave de entrada. Antes de devolverlo, el proveedor abre su propia copia de la clave pasada en pvPara. Si CERT_STORE_READONLY_FLAG se establece en la palabra baja de dwFlags, las subclaves del Registro se abren mediante el RegOpenKey con KEY_READ_ACCESS. De lo contrario, las subclaves del Registro se crean mediante RegCreateKey con KEY_ALL_ACCESS. Los cambios en el contenido del almacén abierto se conservan inmediatamente en el registro. Sin embargo, si CERT_STORE_READONLY_FLAG se establece en la palabra baja de dwFlags, cualquier intento de agregar al contenido del almacén o cambiar la propiedad de un contexto produce un error con GetLastError devolver el código E_ACCESSDENIED.

valor de pvPara: El parámetro pvPara contiene el identificador de una clave del Registro abierta.

CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED
Inicializa el almacén con certificados, CRL y CCL desde una ubicación de memoria que contiene un almacén serializado.

valor de pvPara: El parámetro pvPara apunta a una estructura de CRYPT_DATA_BLOB que contiene el BLOB de memoria serializada.

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
Actualmente no se usa.
CERT_STORE_PROV_SYSTEM_A
Inicializa el almacén con certificados, CRL y CCL del almacén del sistema especificado.

El almacén del sistema es un almacén lógico de recopilación que consta de uno o varios almacenes físicos. Un almacén físico asociado a un almacén del sistema se registra con la función CertRegisterPhysicalStore. Una vez abierto el almacén del sistema, todas las tiendas físicas asociadas a ella también se abren mediante llamadas a CertOpenStore y se agregan a la colección del almacén del sistema mediante la función certAddStoreToCollection . La palabra alta de dwFlags indica la ubicación del almacén del sistema, normalmente establecida en CERT_SYSTEM_STORE_CURRENT_USER. Para obtener más información sobre las ubicaciones del registro, consulte dwFlags más adelante en este tema y Ubicaciones del almacén del sistema. Algunas ubicaciones de almacén del sistema se pueden abrir de forma remota; para obtener más información, consulte Ubicaciones del almacén del sistema.

valor de pvPara: El parámetro pvPara apunta a una cadena ANSI terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root".

CERT_STORE_PROV_SYSTEM(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
Igual que CERT_STORE_PROV_SYSTEM_A.

valor pvPara: El parámetro pvPara apunta a una cadena Unicode terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY_A
Inicializa el almacén con certificados, CRL y CCL desde un almacén de registro físico. El almacén físico no se abre como almacén de recopilación. Las enumeraciones y las búsquedas solo pasan por los certificados, las CRL y las CTL de ese almacén físico.

La palabra alta de dwFlags indica la ubicación del almacén del sistema, normalmente establecida en CERT_SYSTEM_STORE_CURRENT_USER. Para obtener más información, consulte dwFlags más adelante en este tema. Algunas ubicaciones de almacén del sistema se pueden abrir de forma remota; para obtener más información, consulte Ubicaciones del almacén del sistema.

valor de pvPara: El parámetro pvPara apunta a una cadena ANSI terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
Igual que CERT_STORE_PROV_SYSTEM_REGISTRY_A.

valor pvPara: El parámetro pvPara apunta a una cadena Unicode terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root".

[in] dwEncodingType

Especifica el tipo de codificación de certificado y tipo de codificación de mensajes. La codificación solo se usa cuando el parámetro dwSaveAs de la función CertSaveStore contiene CERT_STORE_SAVE_AS_PKCS7. De lo contrario, no se usa el parámetro dwMsgAndCertEncodingType.

Este parámetro solo es aplicable cuando se especifica el tipo de proveedor CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7o CERT_STORE_PROV_FILENAME en el parámetro lpszStoreProvider. Para todos los demás tipos de proveedor, este parámetro no se usa y debe establecerse en cero.

Este parámetro puede ser una combinación de uno o varios de los valores siguientes.

Valor Significado
PKCS_7_ASN_ENCODING
65536 (0x10000)
Especifica la codificación de mensajes PKCS #7.
X509_ASN_ENCODING
1 (0x1)
Especifica la codificación de certificados X.509.

[in] hCryptProv

Este parámetro no se usa y debe establecerse en NULL.

Windows Server 2003 y Windows XP: Un identificador para un proveedor criptográfico. Pasar NULL para este parámetro hace que se use un proveedor predeterminado adecuado. Se recomienda usar el proveedor predeterminado. El proveedor criptográfico predeterminado o especificado se usa para todas las funciones de almacén que comprueban la firma de un certificado de firmante o crL. El tipo de datos de este parámetro es HCRYPTPROV.

[in] dwFlags

Estos valores constan de valores de palabra alta y de palabra baja combinados mediante una operación OR de bit a bit.

La parte de palabra baja de dwFlags controla una variedad de características generales del almacén de certificados de abierto. Esta parte se puede usar con todos los tipos de proveedor de almacén. La parte de palabra baja de dwFlags puede ser uno de los valores siguientes.

Valor Significado
CERT_STORE_BACKUP_RESTORE_FLAG
Use el SE_BACKUP_NAME del subproceso y los privilegios de SE_RESTORE_NAME para abrir almacenes del sistema basados en archivos o del registro. Si el subproceso no tiene estos privilegios, esta función debe producir un error de acceso denegado.
CERT_STORE_CREATE_NEW_FLAG
Se crea un nuevo almacén si no existe uno. Se produce un error en la función si el almacén ya existe.

Si no se establece ni CERT_STORE_OPEN_EXISTING_FLAG ni CERT_STORE_CREATE_NEW_FLAG, se abre un almacén si existe o se crea y se abre si aún no existe.

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
Aplazar el cierre del proveedor del almacén hasta que todos los certificados, CRL o CCL obtenidos del almacén ya no estén en uso. El almacén se cierra realmente cuando se libera el último certificado, CRL o CTL obtenido del almacén. Los cambios realizados en las propiedades de estos certificados, CRL y CCL, incluso después de la llamada a CertCloseStore, se conservan.

Si esta marca no está establecida y los certificados, CRL o CCL obtenidos del almacén todavía están en uso, no se conservarán los cambios realizados en las propiedades de esos certificados, CRL y CTL.

Si se llama a esta función con CERT_CLOSE_STORE_FORCE_FLAG, se omite CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG.

Cuando se establece esta marca y se pasa un valor de parámetronoNULLhCryptProv, ese proveedor seguirá usándose incluso después de la llamada a esta función.

CERT_STORE_DELETE_FLAG
El almacén se elimina en lugar de abrirse. Esta función devuelve NULL para el éxito y el error de la eliminación. Para determinar el éxito de la eliminación, llame a GetLastError, que devuelve cero si el almacén se eliminó y un valor distinto de cero si no se eliminó.
CERT_STORE_ENUM_ARCHIVED_FLAG
Normalmente, una enumeración de todos los certificados del almacén omitirá cualquier certificado con el conjunto de propiedades CERT_ARCHIVED_PROP_ID. Si se establece esta marca, una enumeración de los certificados del almacén contendrá todos los certificados del almacén, incluidos los que tienen la propiedad CERT_ARCHIVED_PROP_ID.
CERT_STORE_MAXIMUM_ALLOWED_FLAG
Abra el almacén con el conjunto máximo de permisos permitidos. Si se especifica esta marca, los almacenes del Registro se abren primero con acceso de escritura y, si se produce un error, se vuelven a abrir con acceso de solo lectura.
CERT_STORE_NO_CRYPT_RELEASE_FLAG
Esta marca no se usa cuando el parámetro hCryptProv es null. Esta marca solo es válida cuandose pasa un identificador de CSP NULL como parámetro hCryptProv. Establecer esta marca impide la liberación automática de un CSP no predeterminado cuando se cierra el almacén de certificados.
CERT_STORE_OPEN_EXISTING_FLAG
Abra solo una tienda existente. Si el almacén no existe, se produce un error en la función.
CERT_STORE_READONLY_FLAG
Abra la tienda en modo de solo lectura. Cualquier intento de cambiar el contenido del almacén producirá un error. Cuando se establece esta marca y se usa un proveedor de almacén basado en el Registro, se abren las subclaves del Registro mediante RegOpenKey con KEY_READ_ACCESS. De lo contrario, las subclaves del Registro se crean mediante RegCreateKey con KEY_ALL_ACCESS.
CERT_STORE_SET_LOCALIZED_NAME_FLAG
Si se admite esta marca, el proveedor establece la propiedad CERT_STORE_LOCALIZED_NAME_PROP_ID del almacén. El nombre localizado se puede recuperar llamando a la función CertGetStoreProperty con dwPropID establecido en CERT_STORE_LOCALIZED_NAME_PROP_ID. Esta marca es compatible con proveedores de tipos CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYy CERT_STORE_PROV_PHYSICAL_W.
CERT_STORE_SHARE_CONTEXT_FLAG
Al abrir un almacén varias veces, puede establecer esta marca para garantizar un uso eficaz de la memoria mediante la reutilización de la memoria de las partes codificadas de un certificado, CRL o CTL en las instancias abiertas de los almacenes.
CERT_STORE_UPDATE_KEYID_FLAG
Existen listas de identificadores de clave en CurrentUser y LocalMachine. Estos identificadores de clave tienen propiedades muy similares a las propiedades de los certificados. Si se establece el CERT_STORE_UPDATE_KEYID_FLAG, para cada identificador de clave de la ubicación del almacén que tiene una propiedad CERT_KEY_PROV_INFO_PROP_ID, esa propiedad se actualiza automáticamente desde la propiedad del identificador de clave CERT_KEY_PROV_INFO_PROP_ID o el CERT_KEY_IDENTIFIER_PROP_ID del certificado relacionado con ese identificador de clave.
 

Los tipos de proveedor CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYy CERT_STORE_PROV_PHYSICAL usan las siguientes palabras altas de dwFlags para especificar las ubicaciones del registro del almacén del sistema:

CERT_SYSTEM_STORE_CURRENT_SERVICE

CERT_SYSTEM_STORE_CURRENT_USER

CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY

CERT_SYSTEM_STORE_LOCAL_MACHINE

CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE

CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY

CERT_SYSTEM_STORE_SERVICES

CERT_SYSTEM_STORE_USERS

De forma predeterminada, se abre una ubicación del almacén del sistema en relación con el HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEo HKEY_USERS clave del Registro predefinida. Para obtener más información, consulte Ubicaciones del almacén del sistema.

Las siguientes marcas de palabra alta invalidan este comportamiento predeterminado.

Valor Significado
CERT_SYSTEM_STORE_RELOCATE_FLAG
Cuando se establece, pvPara debe contener un puntero a una estructura de CERT_SYSTEM_STORE_RELOCATE_PARA en lugar de una cadena. La estructura indica el nombre del almacén y su ubicación en el Registro.
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
De forma predeterminada, cuando se abre el almacén CurrentUser "Root", las raíces de SystemRegistry que no estén en la lista raíz protegida se eliminan de la memoria caché antes de que se devuelva esta función. Cuando se establece esta marca, este valor predeterminado se invalida y se devuelven todas las raíces de SystemRegistry y no se realiza ninguna comprobación de la lista raíz protegida.
 

El proveedor de CERT_STORE_PROV_REGISTRY usa las siguientes marcas de palabra alta.

Valor Significado
CERT_REGISTRY_STORE_REMOTE_FLAG
pvPara contiene un identificador de una clave del Registro en un equipo remoto. Para acceder a una clave del Registro en un equipo remoto, se deben establecer permisos de seguridad en el equipo remoto para permitir el acceso. Para obtener más información, vea Comentarios.
CERT_REGISTRY_STORE_SERIALIZED_FLAG
El proveedor de CERT_STORE_PROV_REG guarda certificados, CRL y CTL en una sola subclave de almacén serializado en lugar de realizar la operación de guardado predeterminada. El valor predeterminado es que cada certificado, CRL o CTL se guarda como una subclave del Registro independiente en la subclave adecuada.

Esta marca se usa principalmente para almacenes descargados de la plantilla de directiva de grupo (GPT), como los almacenes CurrentUserGroupPolicy y LocalMachineGroupPolicy.

Cuando se establece CERT_REGISTRY_STORE_SERIALIZED_FLAG, no se conservan las adiciones, eliminaciones o cambios de propiedad de la propiedad hasta que se realiza una llamada a CertCloseStore o CertControlStore mediante CERT_STORE_CTRL_COMMIT.

 

Los tipos de proveedor CERT_STORE_PROV_FILE y CERT_STORE_PROV_FILENAME usan las siguientes marcas de palabra alta.

Valor Significado
CERT_FILE_STORE_COMMIT_ENABLE
Al establecer esta marca, se confirman las adiciones al almacén o a los cambios realizados en las propiedades de los contextos del almacén en el almacén de archivos, ya sea cuando se llama a certCloseStore o cuando se llama a CertControlStore con CERT_STORE_CONTROL_COMMIT.

CertOpenStore produce un error E_INVALIDARG si se establecen CERT_FILE_STORE_COMMIT_ENABLE y CERT_STORE_READONLY_FLAG en dwFlags.

 

El tipo de proveedor CERT_STORE_PROV_LDAP usa las siguientes marcas de palabra alta.

Valor Significado
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
Realiza una búsqueda DNS de solo registro A en la dirección URL denominada en el parámetro pvPara . Esto evita que se generen consultas DNS falsas al resolver nombres de host de dirección URL. Use esta marca al pasar un nombre de host en lugar de un nombre de dominio para el parámetro pvPara .
CERT_LDAP_STORE_OPENED_FLAG
Use esta marca para usar una sesión LDAP existente. Cuando se especifica esta marca, el parámetro pvPara es la dirección de una estructura de CERT_LDAP_STORE_OPENED_PARA que contiene información sobre la sesión LDAP que se va a usar.
CERT_LDAP_STORE_SIGN_FLAG
Para proporcionar integridad requerida por algunas aplicaciones, firme digitalmente todo el tráfico LDAP hacia y desde un servidor LDAP mediante el protocolo de autenticación Kerberos.
CERT_LDAP_STORE_UNBIND_FLAG
Use esta marca con la marca CERT_LDAP_STORE_OPENED_FLAG para que la sesión LDAP se desenlace cuando se cierre el almacén. El sistema desenlacerá la sesión LDAP mediante la función ldap_unbind cuando se cierre el almacén.

[in] pvPara

Valor de 32 bits que puede contener información adicional para esta función. El contenido de este parámetro depende del valor del lpszStoreProvider y de otros parámetros.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un identificador al almacén de certificados de . Cuando haya terminado de usar la tienda, libere el identificador llamando a la función certCloseStore de .

Si se produce un error en la función, devuelve NULL. Para obtener información de error extendida, llame a GetLastError.

NotaCreateFile, readFile, o los errores del Registro se pueden propagar y sus códigos de error devueltos. CertOpenStore tiene un solo código de error propio, el código ERROR_FILE_NOT_FOUND, que indica que la función no pudo encontrar el proveedor especificado por el parámetro lpszStoreProvider.
 

Observaciones

Un almacén del sistema es una colección que consta de uno o varios almacenes del mismo nivel físico. Para cada almacén del sistema, hay almacenes del mismo nivel físico predefinidos. Después de abrir un almacén del sistema como "My" en CERT_SYSTEM_STORE_CURRENT_USER, se llama a CertOpenStore para abrir todas las tiendas físicas de la colección de almacenes del sistema. Cada uno de estos almacenes físicos se agrega a la colección de almacenes del sistema mediante la función certAddStoreToCollection . Todos los certificados, CRL y CCL de esos almacenes físicos están disponibles a través de la colección de almacenes del sistema lógico.

Nota Es posible que el orden del contexto del certificado no se conserve en el almacén. Para acceder a un certificado específico, debe iterar entre los certificados del almacén.
 

Las siguientes ubicaciones de almacén del sistema se pueden abrir de forma remota:

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

Las ubicaciones del almacén del sistema se abren de forma remota mediante el prefijo del nombre del almacén en la cadena que se pasa a pvPara con el nombre del equipo. Algunos ejemplos de nombres de almacén del sistema remoto son:

  • nombreDeEquipo \ca
  • \\ComputerName\CA
  • ComputerName\ServiceName\Trust
  • \\ComputerName\ServiceName\Trust

Para obtener más información sobre los almacenes del sistema, consulte Ubicaciones del almacén del sistema.

Para obtener más información sobre los almacenes que se migran automáticamente, consulte Migración del almacén de certificados.

Ejemplos

En el ejemplo siguiente se muestran cómo abrir varios almacenes de certificados de diferentes tipos de proveedor de almacén. En el ejemplo se usa la función CreateMyDACL , definida en el tema Creating a DACL , para asegurarse de que el archivo abierto se crea con una DACL adecuada. Para obtener más ejemplos de apertura de otros tipos de proveedor de almacén, vea Ejemplo de código C para abrir almacenes de certificados.

//-------------------------------------------------------------------
// Open a system store, in this case, the My store.

HCERTSTORE hSysStore = NULL;
if(hSysStore = CertOpenStore(
   CERT_STORE_PROV_SYSTEM,          // The store provider type
   0,                               // The encoding type is
                                    // not needed
   NULL,                            // Use the default HCRYPTPROV
   CERT_SYSTEM_STORE_CURRENT_USER,  // Set the store location in a
                                    // registry location
   L"MY"                            // The store name as a Unicode 
                                    // string
   ))
{
    printf("The system store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the system store!\n");
    exit(1);
}

// Other common system stores include "Root", "Trust", and "Ca".


//-------------------------------------------------------------------
// Open a memory store. 

HCERTSTORE hMemStore = NULL;
if(hMemStore = CertOpenStore(
   CERT_STORE_PROV_MEMORY,   // The memory provider type
   0,                        // The encoding type is not needed
   NULL,                     // Use the default HCRYPTPROV
   0,                        // Accept the default dwFlags
   NULL                      // pvPara is not used
   ))
{
    printf("The memory store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the memory store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// Open a read-only store from disk.

HANDLE       hFile = NULL;
HCERTSTORE   hFileStore = NULL;
LPCSTR       pszFileName = "TestStor2.sto";
SECURITY_ATTRIBUTES  sa;        // For DACL

// Create a DACL to use when opening the file.
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;  

// Call function to set the DACL. The DACL is set in the 
// SECURITY_ATTRIBUTES lpSecurityDescriptor member.
if (!CreateMyDACL(&sa))
{
     // Error encountered; generate message and exit.
     printf("Failed CreateMyDACL.\n");
        exit(1);
}

// Obtain the file handle of an existing file.
if (hFile = CreateFile(
     pszFileName,                  // The file name
     GENERIC_READ|GENERIC_WRITE,   // Access mode: Read from and
                                   // write to this file
     0,                            // Share mode
     &sa,                          // Uses the DACL created 
                                   // previously 
     OPEN_ALWAYS,                  // How to create
     FILE_ATTRIBUTE_NORMAL,        // File attributes
     NULL))                        // Template
{
    printf("The file was opened successfully.\n");
}
else
{
    printf("An error occurred during opening of the file!\n");
    exit(1);
}

//-------------------------------------------------------------------
//  This file can contain data before the store itself.
//  At this point, read and use data in the open file that precedes
//  the serialized certificate store data. 
//  To open the certificate store, the file pointer must
//  be placed at the beginning of the certificate store data.

//-------------------------------------------------------------------
//  Open the store.

if(hFileStore = CertOpenStore(
    CERT_STORE_PROV_FILE,     // Load certificates from a file
    0,                        // Encoding type not used
    NULL,                     // Use the default HCRYPTPROV
    CERT_STORE_READONLY_FLAG, // Read-only store
    hFile                     // The handle for the open file 
                              // that is the source of the 
                              // certificates
    ))
{
    printf("The file store was created successfully.\n");
}
else
{
    printf("An error occurred during creation of the file store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// After processing, close the certificate stores and the file.

if(CertCloseStore(
        hSysStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The system store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "system store.\n");
}

if(CertCloseStore(
        hMemStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The memory store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "memory store.\n");
}

if(CertCloseStore(
        hFileStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The file store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file store.\n");
}

if(CloseHandle(hFile))
{
    printf("The file was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file.\n");
}

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de wincrypt.h
biblioteca de Crypt32.lib
DLL de Crypt32.dll

Consulte también

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore

certSaveStore

funciones del almacén de certificados