PFN_CERT_DLL_OPEN_STORE_PROV_FUNC función de devolución de llamada (wincrypt.h)
Un proveedor de tiendas implementa la función CertDllOpenStoreProv y se usa para abrir un almacén. La función CertOpenStore llama a esta función.
Sintaxis
PFN_CERT_DLL_OPEN_STORE_PROV_FUNC PfnCertDllOpenStoreProvFunc;
BOOL PfnCertDllOpenStoreProvFunc(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara,
[in] HCERTSTORE hCertStore,
[in, out] PCERT_STORE_PROV_INFO pStoreProvInfo
)
{...}
Parámetros
[in] lpszStoreProvider
Puntero a una cadena ANSI terminada en null que contiene el tipo de proveedor de almacenamiento.
Los valores siguientes representan los tipos de almacén predefinidos. El tipo de proveedor de almacenamiento 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 CryptInstallOIDFunctionAddress o CryptRegisterOIDFunction . Para obtener más información sobre cómo agregar proveedores de almacenamiento, consulte Extensión de la funcionalidad CertOpenStore.
Identificador de proveedor | Descripción | Contenido de pvPara |
---|---|---|
CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY |
Crea un almacén de certificados en memoria caché. No se cargan inicialmente certificados, listas de revocación de certificados (CRL) ni listas de confianza de certificados (CTL) 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 de un almacén de memoria no se guardan automáticamente. Se pueden guardar en un archivo o en un BLOB de memoria mediante CertSaveStore. |
No se usa. |
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 serializados 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. |
Puntero al identificador de un archivo abierto con CreateFile. |
CERT_STORE_PROV_FILENAME_A |
Inicializa el almacén con certificados, CRL y CTL de un archivo. El proveedor abre el archivo y primero intenta leer el archivo como un almacén serializado, luego 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 van a usar con los mensajes y los certificados. Si el archivo contiene un certificado codificado X.509 , se produce un error en la operación de apertura con GetLastError y devuelve ERROR_ACCESS_DENIED. Si la marca CERT_FILE_STORE_COMMIT_ENABLE se establece en dwFlags, el valor dwCreationDisposition pasado a CreateFile es el siguiente:
Si dwFlags incluye CERT_FILE_STORE_COMMIT_ENABLE, el archivo se confirma como un 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. |
Puntero a una cadena ANSI terminada en null que contiene el nombre de un archivo existente sin abrir. |
CERT_STORE_PROV_FILENAME
CERT_STORE_PROV_FILENAME_W sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W |
Igual que CERT_STORE_PROV_FILENAME_A. | Puntero a una cadena Unicode terminada en null que contiene el nombre de un archivo existente sin abrir. |
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION |
Abre un almacén que será una colección de otros almacenes. 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 CTL 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. |
Debe ser NULL. |
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, CRL y 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 RegOpenKey con KEY_READ_ACCESS. De lo contrario, las subclaves del Registro se crean mediante RegCreateKey con KEY_ALL_ACCESS. Los cambios realizados 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 da como resultado un error con GetLastError devolviendo el código E_ACCESSDENIED. |
Identificador de una clave del Registro abierta. |
CERT_STORE_PROV_SYSTEM_A |
Inicializa el almacén con certificados, CRL y CTL 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, todos los almacenes físicos asociados a él 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 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 del almacén del sistema se pueden abrir de forma remota; para obtener más información, vea Ubicaciones del almacén del sistema. |
Puntero a una cadena ANSI terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root". |
CERT_STORE_PROV_SYSTEM
CERT_STORE_PROV_SYSTEM_W sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W |
Igual que CERT_STORE_PROV_SYSTEM_A. | Puntero 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 CTL 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 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 del almacén del sistema se pueden abrir de forma remota; para obtener más información, vea Ubicaciones del almacén del sistema. |
Puntero 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
CERT_STORE_PROV_SYSTEM_REGISTRY_W sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W |
Igual que CERT_STORE_PROV_SYSTEM_REGISTRY_A. | Puntero a una cadena Unicode terminada en null que contiene un nombre de almacén del sistema, como "My" o "Root". |
CERT_STORE_PROV_PHYSICAL
CERT_STORE_PROV_PHYSICAL_W sz_CERT_STORE_PROV_PHYSICAL 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.LocalMachine". Aquí, "Root" es el nombre del almacén del sistema y ". LocalMachine" 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. Algunas ubicaciones de almacén físico se pueden abrir de forma remota. |
Puntero a una cadena Unicode terminada en null que contiene el nombre del almacén del sistema y los nombres físicos. |
CERT_STORE_PROV_MSG | Inicializa el almacén con certificados, CRL y CTL del mensaje criptográfico especificado. El parámetro dwEncodingType debe contener los tipos de codificación usados tanto con mensajes como con certificados. | Identificador HCRYPTMSG del mensaje codificado, devuelto por una llamada a CryptMsgOpenToDecode. |
CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7 |
Inicializa el almacén con certificados, CRL y CTL a partir de un mensaje con firma PKCS #7 codificado. El parámetro dwEncodingType debe especificar los tipos de codificación que se van a usar con los mensajes y los certificados. | Puntero a una estructura CRYPT_DATA_BLOB que representa el mensaje codificado. |
CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED |
Inicializa el almacén con certificados, CRL y CTL desde una ubicación de memoria que contiene un almacén serializado. | Puntero a una estructura CRYPT_DATA_BLOB que contiene el BLOB de memoria serializada. |
CERT_STORE_PROV_LDAP
CERT_STORE_PROV_LDAP_W sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W |
Inicializa el almacén con certificados, CRL y CTL 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 y un único atributo. |
Si el parámetro dwFlags contiene la marca CERT_LDAP_STORE_OPENED_FLAG , esta es 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, se trata de un puntero 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_SMART_CARD
CERT_STORE_PROV_SMART_CARD_W sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W |
No se usa actualmente. |
[in] dwEncodingType
Especifica el tipo de codificación de certificado y el 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 dwEncodingType .
Este parámetro solo es aplicable cuando se especifica el tipo de proveedor CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7 o 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 |
---|---|
|
Especifica la codificación de mensajes PKCS #7. |
|
Especifica la codificación de certificados X.509. |
[in] hCryptProv
Identificador de un proveedor criptográfico. Este parámetro puede ser NULL.
[in] dwFlags
Estos valores constan de valores de palabra alta y de palabra baja combinados mediante una operación OR bit a bit.
La parte de palabra baja de dwFlags controla una variedad de características generales del almacén de certificados abierto. Esta parte se puede usar con todos los tipos de proveedor de almacenamiento. La parte de palabra baja de dwFlags puede ser uno de los siguientes valores.
Valor | Significado |
---|---|
|
Cree un nuevo almacén si no existe uno. Esta función debe producir un error si el almacén ya existe.
Si no se establece ni CERT_STORE_OPEN_EXISTING_FLAG ni CERT_STORE_CREATE_NEW_FLAG , abra un almacén existente o cree y abra un almacén si aún no existe. |
|
Aplazar el cierre del proveedor del almacén hasta que ya no se usen todos los certificados, CRL o CTL obtenidos del almacén. 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 CTL, incluso después de la llamada a esta función, deben conservarse.
Si esta marca no está establecida y los certificados, CRL o CTL obtenidos del almacén siguen en uso, no se deben conservar 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 debe omitir CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG . Cuando se establece esta marca y se pasa un valor HCRYPTPROV distinto de NULL, ese proveedor se seguirá usando incluso después de la llamada a esta función. |
|
El almacén se elimina en lugar de abrirse. Esta función devuelve FALSE para el éxito y el error de la eliminación. Para indicar el éxito de la eliminación, llame a SetLastError con cero. Para indicar el error de eliminación, llame a SetLastError con el código de error adecuado. |
|
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 . |
|
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. |
|
Esta marca no se usa cuando el parámetro hCryptProv es NULL. Esta marca solo es válida cuando se pasa un identificador CSP que no es NULL como parámetro hCryptProv . Al establecer esta marca, se impide la liberación automática de un CSP no predeterminado cuando se cierra el almacén de certificados. |
|
Abra solo un almacén existente. Si el almacén no existe, se produce un error en la función. |
|
Abra el almacén 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, las subclaves del Registro se abren mediante RegOpenKey con KEY_READ_ACCESS. De lo contrario, las subclaves del Registro se crean mediante RegCreateKey con KEY_ALL_ACCESS. |
|
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_REGISTRY y CERT_STORE_PROV_PHYSICAL_W. |
|
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. |
|
Listas de identificadores de clave existen 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. |
|
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. |
Los tipos de proveedor CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY y 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_MACHINE o 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 |
---|---|
|
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. |
|
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 esta función devuelva. 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 |
---|---|
|
El proveedor de CERT_STORE_PROV_REG guarda certificados, CRL y CTL en una sola subclave de almacén serializada en lugar de realizar la operación de guardado predeterminada. El valor predeterminado es que cada certificado, CRL o CTL se guarde 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 hasta que haya una llamada a CertCloseStore o CertControlStore mediante CERT_STORE_CTRL_COMMIT. |
|
pvPara contiene un identificador para 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 la sección Comentarios. |
Los tipos de proveedor CERT_STORE_PROV_FILE y CERT_STORE_PROV_FILENAME usan las siguientes marcas de palabra alta.
Valor | Significado |
---|---|
|
Al establecer esta marca, se confirman las adiciones al almacén o los cambios realizados en las propiedades de 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 |
---|---|
|
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. |
|
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. |
|
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 . |
|
Use esta marca con la marca de CERT_LDAP_STORE_OPENED_FLAG para que la sesión LDAP se desenlace cuando se cierra 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 de lpszStoreProvider y de otros parámetros.
[in] hCertStore
Identificador del almacén en memoria que se ha abierto y se puede usar para realizar llamadas a otras llamadas API relacionadas con el almacén, como CertAddSerializedElementToStore.
[in, out] pStoreProvInfo
Puntero a la estructura CERT_STORE_PROV_INFO que se va a actualizar. La estructura de datos se ha cero y cbSize se ha establecido antes de la llamada.
El miembro cStoreProvFunc de la estructura CERT_STORE_PROV_INFO es el recuento de funciones de devolución de llamada que se implementan y se deben establecer en último lugar. Después de establecer cStoreProvFunc , todas las llamadas de almacén posteriores, como CertAddEncodedCertificateToStore, llamarán a la función de devolución de llamada del proveedor adecuada.
Valor devuelto
TRUE si se realiza correctamente; de lo contrario, FALSE.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | wincrypt.h |
Consulte también
Funciones de devolución de llamada