PFN_CERT_DLL_OPEN_STORE_PROV_FUNC função de retorno de chamada (wincrypt.h)
A função CertDllOpenStoreProv é implementada por um provedor de lojas e é usada para abrir um repositório. Essa função é chamada pela função CertOpenStore .
Sintaxe
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
Um ponteiro para uma cadeia de caracteres ANSI terminada em nulo que contém o tipo de provedor de repositório.
Os valores a seguir representam os tipos de repositório predefinidos. O tipo de provedor de repositório determina o conteúdo do parâmetro pvPara e o uso e o significado da palavra alta do parâmetro dwFlags . Provedores de repositório adicionais podem ser instalados ou registrados usando a função CryptInstallOIDFunctionAddress ou CryptRegisterOIDFunction . Para obter mais informações sobre como adicionar provedores de repositório, consulte Estendendo a funcionalidade CertOpenStore.
Identificador do provedor | Descrição | conteúdo pvPara |
---|---|---|
CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY |
Cria um repositório de certificados na memória armazenada em cache. Nenhum certificado, CRLs ( listas de certificados revogados ) ou CTLs ( listas de certificados confiáveis ) são inicialmente carregados no repositório. Normalmente usado para criar um repositório temporário.
Qualquer adição de certificados, CRLs ou CTLs ou alterações nas propriedades de certificados, CRLs ou CTLs em um repositório de memória não é salva automaticamente. Eles podem ser salvos em um arquivo ou em um BLOB de memória usando CertSaveStore. |
Não usado. |
CERT_STORE_PROV_FILE |
Inicializa o repositório com certificados, CRLs e CTLs lidos de um arquivo aberto especificado. Esse provedor espera que o arquivo contenha apenas um repositório serializado e não mensagens assinadas PKCS nº 7 ou um único certificado codificado.
O ponteiro do arquivo deve ser posicionado no início das informações do repositório serializado. Depois que os dados no repositório serializado forem carregados no repositório de certificados, o ponteiro do arquivo será posicionado no início de quaisquer dados que possam seguir os dados do repositório serializado no arquivo. Se CERT_FILE_STORE_COMMIT_ENABLE for definido em dwFlags, o identificador de arquivo será duplicado e o repositório sempre será confirmado como um repositório serializado. O arquivo não é fechado quando o repositório é fechado. |
Um ponteiro para o identificador de um arquivo aberto com CreateFile. |
CERT_STORE_PROV_FILENAME_A |
Inicializa o repositório com certificados, CRLs e CTLs de um arquivo. O provedor abre o arquivo e primeiro tenta ler o arquivo como um repositório serializado, depois como uma mensagem assinada PKCS nº 7 e, por fim, como um único certificado codificado.
O parâmetro dwEncodingType deve conter os tipos de codificação a serem usados com mensagens e certificados. Se o arquivo contiver um certificado codificado em X.509 , a operação aberta falhará com GetLastError e retornará ERROR_ACCESS_DENIED. Se o sinalizador CERT_FILE_STORE_COMMIT_ENABLE for definido em dwFlags, o valor dwCreationDisposition passado para CreateFile será o seguinte:
Se dwFlags incluir CERT_FILE_STORE_COMMIT_ENABLE, o arquivo será confirmado como um PKCS nº 7 ou um repositório serializado, dependendo do tipo de arquivo aberto. Se o arquivo estiver vazio ou se o nome do arquivo tiver uma extensão .p7c ou .spc, o arquivo será confirmado como um PKCS #7. Caso contrário, o arquivo será confirmado como um repositório serializado. |
Um ponteiro para a cadeia de caracteres ANSI terminada em nulo que contém o nome de um arquivo não aberto existente. |
CERT_STORE_PROV_FILENAME
CERT_STORE_PROV_FILENAME_W sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W |
O mesmo que CERT_STORE_PROV_FILENAME_A. | Um ponteiro para a cadeia de caracteres Unicode terminada em nulo que contém o nome de um arquivo não aberto existente. |
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION |
Abre um repositório que será uma coleção de outras lojas. Os repositórios são adicionados ou removidos da coleção usando CertAddStoreToCollection e CertRemoveStoreFromCollection. Quando um repositório é adicionado a uma coleção, todos os certificados, CRLs e CTLs nesse repositório ficam disponíveis para pesquisas ou enumerações do repositório de coleção.
A palavra alta de dwFlags é definida como zero. |
Deve ser NULL. |
CERT_STORE_PROV_REG |
Inicializa o repositório com certificados, CRLs e CTLs de uma subchave do Registro.
Esse provedor abre ou cria as subchaves do Registro Certificados, CRLs e CTLs sob a chave passada em pvPara. A chave de entrada não é fechada pelo provedor. Antes de retornar, o provedor abre sua própria cópia da chave passada em pvPara. Se CERT_STORE_READONLY_FLAG estiver definido na palavra baixa de dwFlags, as subchaves do Registro serão abertas usando RegOpenKey com KEY_READ_ACCESS. Caso contrário, as subchaves do Registro são criadas usando RegCreateKey com KEY_ALL_ACCESS. Todas as alterações no conteúdo do repositório aberto são persistidas imediatamente no registro. No entanto, se CERT_STORE_READONLY_FLAG estiver definido na palavra baixa de dwFlags, qualquer tentativa de adicionar ao conteúdo do repositório ou alterar a propriedade de um contexto resultará em um erro com GetLastError retornando o código E_ACCESSDENIED. |
O identificador de uma chave do Registro aberta. |
CERT_STORE_PROV_SYSTEM_A |
Inicializa o repositório com certificados, CRLs e CTLs do repositório do sistema especificado.
O repositório do sistema é um repositório de coleções lógico que consiste em um ou mais repositórios físicos. Um repositório físico associado a um repositório do sistema é registrado com a função CertRegisterPhysicalStore . Depois que o repositório do sistema é aberto, todos os repositórios físicos associados a ele também são abertos por chamadas para CertOpenStore e são adicionados à coleção de repositórios do sistema usando a função CertAddStoreToCollection . A palavra alta de dwFlags indica o local do repositório do sistema, geralmente definido como CERT_SYSTEM_STORE_CURRENT_USER. Para obter detalhes sobre os locais do Registro, consulte dwFlags mais adiante neste tópico e Localizações do Repositório do Sistema. Alguns locais de repositório do sistema podem ser abertos remotamente; para obter mais informações, consulte Locais do Repositório do Sistema. |
Um ponteiro para uma cadeia de caracteres ANSI terminada em nulo que contém um nome de repositório do sistema, como "My" ou "Root". |
CERT_STORE_PROV_SYSTEM
CERT_STORE_PROV_SYSTEM_W sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W |
O mesmo que CERT_STORE_PROV_SYSTEM_A. | Um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém um nome de repositório do sistema, como "My" ou "Root". |
CERT_STORE_PROV_SYSTEM_REGISTRY_A |
Inicializa o repositório com certificados, CRLs e CTLs de um repositório de registro físico. O repositório físico não é aberto como um repositório de coleção. Enumerações e pesquisas passam apenas pelos certificados, CRLs e CTLs nesse repositório físico.
A palavra alta de dwFlags indica o local do repositório do sistema, geralmente definido como CERT_SYSTEM_STORE_CURRENT_USER. Para obter mais informações, consulte dwFlags mais adiante neste tópico. Alguns locais de repositório do sistema podem ser abertos remotamente; para obter mais informações, consulte Locais do Repositório do Sistema. |
Um ponteiro para uma cadeia de caracteres ANSI terminada em nulo que contém um nome de repositório do sistema, como "My" ou "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 |
O mesmo que CERT_STORE_PROV_SYSTEM_REGISTRY_A. | Um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém um nome de repositório do sistema, como "My" ou "Root". |
CERT_STORE_PROV_PHYSICAL
CERT_STORE_PROV_PHYSICAL_W sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W |
Inicializa o repositório com certificados, CRLs e CTLs de um repositório físico especificado que é membro de um repositório de sistema lógico.
Dois nomes são separados com uma barra invertida (\), por exemplo, "Root.LocalMachine". Aqui, "Raiz" é o nome do repositório do sistema e ". LocalMachine" é o nome do repositório físico. Os nomes do sistema e do repositório físico não podem conter barras invertidas. A palavra alta de dwFlags indica o local do repositório do sistema, geralmente CERT_SYSTEM_STORE_CURRENT_USER. Para obter mais informações, consulte dwFlags mais adiante neste tópico. Alguns locais de repositório físico podem ser abertos remotamente. |
Um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém o nome do repositório do sistema e os nomes físicos. |
CERT_STORE_PROV_MSG | Inicializa o repositório com certificados, CRLs e CTLs da mensagem criptográfica especificada. O parâmetro dwEncodingType deve conter os tipos de codificação usados com mensagens e certificados. | Um identificador HCRYPTMSG da mensagem codificada, retornado por uma chamada para CryptMsgOpenToDecode. |
CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7 |
Inicializa o repositório com certificados, CRLs e CTLs de uma mensagem assinada PKCS nº 7 codificada. O parâmetro dwEncodingType deve especificar os tipos de codificação a serem usados com mensagens e certificados. | Um ponteiro para uma estrutura CRYPT_DATA_BLOB que representa a mensagem codificada. |
CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED |
Inicializa o repositório com certificados, CRLs e CTLs de um local de memória que contém um repositório serializado. | Um ponteiro para uma estrutura CRYPT_DATA_BLOB que contém o BLOB de memória serializada. |
CERT_STORE_PROV_LDAP
CERT_STORE_PROV_LDAP_W sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W |
Inicializa o repositório com certificados, CRLs e CTLs dos resultados de uma consulta LDAP.
Para executar operações de gravação no repositório, a cadeia de caracteres de consulta deve especificar uma consulta BASE sem filtro e um único atributo. |
Se o parâmetro dwFlags contiver o sinalizador CERT_LDAP_STORE_OPENED_FLAG , esse será o endereço de uma estrutura CERT_LDAP_STORE_OPENED_PARA que especifica a sessão LDAP estabelecida a ser usada.
Caso contrário, esse é um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém a cadeia de caracteres de consulta LDAP. Para obter mais informações sobre cadeias de caracteres de consulta LDAP, consulte Dialeto 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 |
Não usado no momento. |
[in] dwEncodingType
Especifica o tipo de codificação de certificado e o tipo de codificação de mensagem. A codificação é usada somente quando o parâmetro dwSaveAs da função CertSaveStore contém CERT_STORE_SAVE_AS_PKCS7. Caso contrário, o parâmetro dwEncodingType não será usado.
Esse parâmetro só é aplicável quando o tipo de provedor CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7 ou CERT_STORE_PROV_FILENAME é especificado no parâmetro lpszStoreProvider . Para todos os outros tipos de provedor, esse parâmetro não é usado e deve ser definido como zero.
Esse parâmetro pode ser uma combinação de um ou mais dos valores a seguir.
Valor | Significado |
---|---|
|
Especifica a codificação de mensagens PKCS nº 7. |
|
Especifica a codificação de certificado X.509. |
[in] hCryptProv
Um identificador para um provedor criptográfico. Este parâmetro pode ser NULL.
[in] dwFlags
Esses valores consistem em valores de palavra alta e palavra baixa combinados usando uma operação OR bit a bit.
A parte de palavra baixa de dwFlags controla uma variedade de características gerais do repositório de certificados aberto. Essa parte pode ser usada com todos os tipos de provedor de repositório. A parte de palavra baixa de dwFlags pode ser um dos valores a seguir.
Valor | Significado |
---|---|
|
Crie um novo repositório se um não existir. Essa função deverá falhar se o repositório já existir.
Se nem CERT_STORE_OPEN_EXISTING_FLAG nem CERT_STORE_CREATE_NEW_FLAG estiver definido, abra um repositório existente ou crie e abra um repositório se ele ainda não existir. |
|
Adie o fechamento do provedor do repositório até que todos os certificados, CRLs ou CTLs obtidos do repositório não estejam mais em uso. Na verdade, o repositório é fechado quando o último certificado, CRL ou CTL obtido do repositório é liberado. Todas as alterações feitas nas propriedades desses certificados, CRLs e CTLs, mesmo após a chamada a essa função, devem ser mantidas.
Se esse sinalizador não estiver definido e certificados, CRLs ou CTLs obtidos do repositório ainda estiverem em uso, quaisquer alterações nas propriedades desses certificados, CRLs e CTLs não deverão ser mantidas. Se essa função for chamada com CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG deverá ser ignorado. Quando esse sinalizador é definido e um valor HCRYPTPROV não NULL é passado, esse provedor continuará a ser usado mesmo após a chamada para essa função. |
|
O repositório é excluído em vez de ser aberto. Essa função retorna FALSE para êxito e falha da exclusão. Para indicar o sucesso da exclusão, chame SetLastError com zero. Para indicar a falha da exclusão, chame SetLastError com o código de erro apropriado. |
|
Normalmente, uma enumeração de todos os certificados no repositório ignorará qualquer certificado com a propriedade CERT_ARCHIVED_PROP_ID definida. Se esse sinalizador for definido, uma enumeração dos certificados no repositório conterá todos os certificados no repositório, incluindo aqueles que têm a propriedade CERT_ARCHIVED_PROP_ID . |
|
Abra o repositório com o conjunto máximo de permissões permitidas. Se esse sinalizador for especificado, os repositórios do Registro serão abertos pela primeira vez com acesso de gravação e, se isso falhar, eles serão reabertos com acesso somente leitura. |
|
Esse sinalizador não é usado quando o parâmetro hCryptProv é NULL. Esse sinalizador só é válido quando um identificador CSP não NULL é passado como o parâmetro hCryptProv . Definir esse sinalizador impede a versão automática de um CSP não padrão quando o repositório de certificados é fechado. |
|
Abra apenas um repositório existente. Se o repositório não existir, a função falhará. |
|
Abra o repositório no modo somente leitura. Qualquer tentativa de alterar o conteúdo do repositório resultará em um erro. Quando esse sinalizador é definido e um provedor de repositório baseado em registro está sendo usado, as subchaves do Registro são abertas usando RegOpenKey com KEY_READ_ACCESS. Caso contrário, as subchaves do Registro são criadas usando RegCreateKey com KEY_ALL_ACCESS. |
|
Se esse sinalizador tiver suporte, o provedor definirá a propriedade CERT_STORE_LOCALIZED_NAME_PROP_ID do repositório. O nome localizado pode ser recuperado chamando a função CertGetStoreProperty com dwPropID definido como CERT_STORE_LOCALIZED_NAME_PROP_ID. Esse sinalizador tem suporte para provedores de tipos CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY e CERT_STORE_PROV_PHYSICAL_W. |
|
Ao abrir um repositório várias vezes, você pode definir esse sinalizador para garantir o uso eficiente da memória reutilizando a memória para as partes codificadas de um contexto de certificado, CRL ou CTL nas instâncias abertas dos repositórios. |
|
Listas de identificadores de chave existem em CurrentUser e LocalMachine. Esses identificadores de chave têm propriedades muito semelhantes às propriedades dos certificados. Se o CERT_STORE_UPDATE_KEYID_FLAG estiver definido, para cada identificador de chave no local do repositório que tem uma propriedade CERT_KEY_PROV_INFO_PROP_ID , essa propriedade será atualizada automaticamente da propriedade do identificador de chave CERT_KEY_PROV_INFO_PROP_ID ou do CERT_KEY_IDENTIFIER_PROP_ID do certificado relacionado a esse identificador de chave. |
|
Use os privilégios de SE_BACKUP_NAME e SE_RESTORE_NAME do thread para abrir repositórios de sistema baseados em arquivo ou registro. Se o thread não tiver esses privilégios, essa função deverá falhar com um erro de acesso negado. |
Os tipos de provedor CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY e CERT_STORE_PROV_PHYSICAL usam as seguintes palavras altas de dwFlags para especificar locais de registro do repositório do 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
Por padrão, um local de repositório do sistema é aberto em relação ao HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE ou HKEY_USERS chave predefinida do Registro. Para obter mais informações, consulte Locais do Repositório do Sistema.
Os sinalizadores de palavra alta a seguir substituem esse comportamento padrão.
Valor | Significado |
---|---|
|
Quando definido, pvPara deve conter um ponteiro para uma estrutura CERT_SYSTEM_STORE_RELOCATE_PARA em vez de uma cadeia de caracteres. A estrutura indica o nome do repositório e sua localização no registro. |
|
Por padrão, quando o repositório "Raiz" do CurrentUser é aberto, todas as raízes SystemRegistry que não estão na lista raiz protegida são excluídas do cache antes que essa função retorne. Quando esse sinalizador é definido, esse padrão é substituído e todas as raízes no SystemRegistry são retornadas e nenhuma marcar da lista raiz protegida é feita. |
O provedor de CERT_STORE_PROV_REGISTRY usa os seguintes sinalizadores de palavra alta.
Valor | Significado |
---|---|
|
O provedor CERT_STORE_PROV_REG salva certificados, CRLs e CTLs em uma única subchave de repositório serializada em vez de executar a operação de salvamento padrão. O padrão é que cada certificado, CRL ou CTL seja salvo como uma subchave separada do Registro sob a subchave apropriada.
Esse sinalizador é usado principalmente para repositórios baixados do modelo de política de grupo (GPT), como os repositórios CurrentUserGroupPolicy e LocalMachineGroupPolicy. Quando CERT_REGISTRY_STORE_SERIALIZED_FLAG é definido, as adições de repositório, exclusões ou alterações de propriedade não são mantidas até que haja uma chamada para CertCloseStore ou CertControlStore usando CERT_STORE_CTRL_COMMIT. |
|
pvPara contém um identificador para uma chave do Registro em um computador remoto. Para acessar uma chave do Registro em um computador remoto, as permissões de segurança no computador remoto devem ser definidas para permitir o acesso. Para obter mais informações, consulte Comentários. |
Os tipos de provedor CERT_STORE_PROV_FILE e CERT_STORE_PROV_FILENAME usam os sinalizadores de palavra alta a seguir.
Valor | Significado |
---|---|
|
Definir esse sinalizador confirma quaisquer adições ao repositório ou quaisquer alterações feitas em propriedades de contextos no repositório para o repositório de arquivos quando CertCloseStore é chamado ou quando CertControlStore é chamado com CERT_STORE_CONTROL_COMMIT.
O CertOpenStore falhará com E_INVALIDARG se CERT_FILE_STORE_COMMIT_ENABLE e CERT_STORE_READONLY_FLAG estiverem definidos em dwFlags. |
O tipo de provedor CERT_STORE_PROV_LDAP usa os seguintes sinalizadores de palavra alta.
Valor | Significado |
---|---|
|
Para fornecer integridade exigida por alguns aplicativos, assine digitalmente todo o tráfego LDAP de e para um servidor LDAP usando o protocolo de autenticação Kerberos. |
|
Use esse sinalizador para usar uma sessão LDAP existente. Quando esse sinalizador é especificado, o parâmetro pvPara é o endereço de uma estrutura CERT_LDAP_STORE_OPENED_PARA que contém informações sobre a sessão LDAP a ser usada. |
|
Executa uma pesquisa DNS somente registro A na URL nomeada no parâmetro pvPara . Isso impede que consultas DNS falsas sejam geradas ao resolver nomes de host de URL. Use esse sinalizador ao passar um nome de host em vez de um nome de domínio para o parâmetro pvPara . |
|
Use esse sinalizador com o sinalizador CERT_LDAP_STORE_OPENED_FLAG para fazer com que a sessão LDAP seja desvinculada quando o repositório for fechado. O sistema desvinmará a sessão LDAP usando a função ldap_unbind quando o repositório for fechado. |
[in] pvPara
Um valor de 32 bits que pode conter informações adicionais para essa função. O conteúdo desse parâmetro depende do valor do lpszStoreProvider e de outros parâmetros.
[in] hCertStore
O identificador do repositório na memória que foi aberto e pode ser usado para fazer chamadas para outras chamadas à API relacionadas ao repositório, como CertAddSerializedElementToStore.
[in, out] pStoreProvInfo
Um ponteiro para a estrutura CERT_STORE_PROV_INFO a ser atualizada. A estrutura de dados foi zerado e cbSize definido antes da chamada.
O membro cStoreProvFunc da estrutura CERT_STORE_PROV_INFO é a contagem de funções de retorno de chamada que são implementadas e devem ser definidas por último. Depois que cStoreProvFunc for definido, todas as chamadas de repositório subsequentes, como CertAddEncodedCertificateToStore, chamarão a função de retorno de chamada do provedor apropriada.
Retornar valor
TRUE se tiver êxito; caso contrário, FALSE.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | wincrypt.h |