Função CertOpenStore (wincrypt.h)

A função CertOpenStore abre um repositório de certificados usando um tipo de provedor de repositório especificado. Embora essa função possa abrir um repositório de certificados para a maioria das finalidades, CertOpenSystemStore é recomendável abrir os repositórios de certificados mais comuns. CertOpenStore é necessário para opções mais complexas e casos especiais.

Sintaxe

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

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.

Valor Significado
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
Abre uma loja que será uma coleção de outras lojas. As lojas são adicionadas ou removidas 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 está definida como zero.

valor de pvPara: O parâmetro pvPara deve ser NULL.

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 de 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 qualquer dado que possa seguir os dados do armazenamento 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.

valor de pvPara: O parâmetro pvPara deve conter um ponteiro para o identificador de um arquivo aberto usando 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 X.509, a operação aberta falhará e uma chamada para a função GetLastError retornará ERROR_ACCESS_DENIED. Se o sinalizador de CERT_FILE_STORE_COMMIT_ENABLE for definido em dwFlags, o valor dwCreationDisposition passado para CreateFile será o seguinte:

  • Se o sinalizador de CERT_STORE_CREATE_NEW_FLAG estiver definido, CreateFile usará CREATE_NEW.
  • Se o sinalizador CERT_STORE_OPEN_EXISTING_FLAG estiver definido, CreateFile usará OPEN_EXISTING.
  • Para todas as outras configurações de dwFlags, CreateFile usa OPEN_ALWAYS.

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 nº 7. Caso contrário, o arquivo será confirmado como um repositório serializado.

valor de pvPara: O parâmetro pvPara deve conter um ponteiro para a cadeia de caracteres ANSI terminada em nulo que contém o nome de um arquivo existente e não aberto.

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
O mesmo que CERT_STORE_PROV_FILENAME_A.

valor de pvPara: O parâmetro pvPara deve conter um ponteiro para a cadeia de caracteres Unicode terminada em nulo que contém o nome de um arquivo existente e não aberto.

CERT_STORE_PROV_LDAP(_W)
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.

valor de pvPara: Se o parâmetro dwFlags contiver CERT_LDAP_STORE_OPENED_FLAG, defina pvPara para o endereço de uma estrutura de CERT_LDAP_STORE_OPENED_PARA que especifica a sessão LDAP estabelecida a ser usada.

Caso contrário, defina pvPara para apontar 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_MEMORY
sz_CERT_STORE_PROV_MEMORY
Cria um repositório de certificados na memória armazenada em cache. Nenhum certificado, listas de revogação de certificados (CRLs) ou listas de confiança de certificado (CTLs) 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 uma memória blob usando CertSaveStore.

valor de pvPara: o parâmetro pvPara não é usado.

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.

valor de pvPara: O parâmetro pvPara contém um identificador HCRYPTMSG da mensagem codificada, retornado por uma chamada para CryptMsgOpenToDecode.

CERT_STORE_PROV_PHYSICAL(_W)
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.Default". Aqui, "Raiz" é o nome do repositório do sistema e ". Padrão" é o nome do repositório físico. Os nomes do sistema e do repositório físico não podem conter nenhuma barra invertida. 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 e consulte Locais do Repositório do Sistema. Alguns locais de repositório físico podem ser abertos remotamente.

valor de pvPara: o parâmetro pvPara aponta para uma cadeia de caracteres Unicode terminada em nulo que contém o nome do repositório do sistema e nomes físicos.

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.

valor de pvPara: o parâmetro pvPara aponta para uma estrutura de CRYPT_DATA_BLOB que representa a mensagem codificada.

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
Inicializa o repositório com o conteúdo de um pacote de PKCS nº 12.

Se o pacote PKCS nº 12 estiver protegido com uma senha NULL ou vazia, essa função terá êxito em abrir o repositório.

A partir do Windows 8 e do Windows Server 2012, se a senha inserida no pacote PFX estiver protegida a uma entidade de segurança do Active Directory (AD) e o usuário atual, como membro dessa entidade de segurança, tiver permissão para descriptografar a senha, essa função terá êxito em abrir o repositório. Para obter mais informações, consulte o parâmetro pvPara e o sinalizador PKCS12_PROTECT_TO_DOMAIN_SIDS da função PFXExportCertStoreEx.

Você pode proteger senhas PFX para uma entidade de segurança do AD a partir do Windows 8 e do Windows Server 2012.

valor de pvPara: o parâmetro pvPara aponta para uma estrutura de CRYPT_DATA_BLOB que representa o pacote PKCS #12.

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, crlse de CTLs sob a chave passada no 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 definida na palavra baixa de dwFlags, as subchaves do Registro serão abertas usando a 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 imediatamente mantidas no registro. No entanto, se CERT_STORE_READONLY_FLAG for 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.

valor de pvPara: o parâmetro pvPara contém o identificador de uma chave do Registro aberta.

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.

valor de pvPara: o parâmetro pvPara aponta para uma estrutura de CRYPT_DATA_BLOB que contém o BLOB de memória serializada.

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
Não usado no momento.
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 de 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 posteriormente neste tópico e locais do Repositório do Sistema. Alguns locais do repositório do sistema podem ser abertos remotamente; para obter mais informações, consulte Os Locais do Repositório de Sistemas.

valor de pvPara: o parâmetro pvPara aponta 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(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
O mesmo que CERT_STORE_PROV_SYSTEM_A.

valor de pvPara: o parâmetro pvPara aponta 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. As 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 do repositório do sistema podem ser abertos remotamente; para obter mais informações, consulte Locais do Repositório de Sistemas.

valor de pvPara: o parâmetro pvPara aponta 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(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
O mesmo que CERT_STORE_PROV_SYSTEM_REGISTRY_A.

valor de pvPara: o parâmetro pvPara aponta para uma cadeia de caracteres Unicode terminada em nulo que contém um nome de repositório do sistema, como "My" ou "Root".

[in] dwEncodingType

Especifica o tipo de codificação de certificado e 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 dwMsgAndCertEncodingType não será usado.

Esse parâmetro só é aplicável quando o tipo de provedor CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7ou 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
PKCS_7_ASN_ENCODING
65536 (0x10000)
Especifica a codificação de mensagens PKCS nº 7.
X509_ASN_ENCODING
1 (0x1)
Especifica a codificação de certificado X.509.

[in] hCryptProv

Esse parâmetro não é usado e deve ser definido como NULL.

Windows Server 2003 e Windows XP: um identificador para um provedor criptográfico. Passar NULL para esse parâmetro faz com que um provedor padrão apropriado seja usado. É recomendável usar o provedor padrão. O provedor criptográfico padrão ou especificado é usado para todas as funções de repositório que verificam a assinatura de um certificado de entidade ou CRL. O tipo de dados desse parâmetro é HCRYPTPROV.

[in] dwFlags

Esses valores consistem em valores de palavra alta e de palavra baixa combinados usando uma operação or debit a bit.

A parte de palavras baixas 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 baixa de dwFlags pode ser um dos valores a seguir.

Valor Significado
CERT_STORE_BACKUP_RESTORE_FLAG
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.
CERT_STORE_CREATE_NEW_FLAG
Um novo repositório será criado se um não existir. A função falhará se o repositório já existir.

Se nem CERT_STORE_OPEN_EXISTING_FLAG nem CERT_STORE_CREATE_NEW_FLAG estiver definido, um repositório será aberto se existir ou for criado e aberto se ainda não existir.

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
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. O repositório é realmente 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 para CertCloseStore, são 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 serão mantidas.

Se essa função for chamada com CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG será ignorada.

Quando esse sinalizador for definido e um valor de parâmetro deNULL nãohCryptProv for passado, esse provedor continuará a ser usado mesmo após a chamada para essa função.

CERT_STORE_DELETE_FLAG
O repositório é excluído em vez de ser aberto. Essa função retorna NULL para êxito e falha da exclusão. Para determinar o êxito da exclusão, chame GetLastError, que retornará zero se o repositório tiver sido excluído e um valor diferente de zero se ele não tiver sido excluído.
CERT_STORE_ENUM_ARCHIVED_FLAG
Normalmente, uma enumeração de todos os certificados no repositório ignorará qualquer certificado com o conjunto de propriedades CERT_ARCHIVED_PROP_ID. 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.
CERT_STORE_MAXIMUM_ALLOWED_FLAG
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.
CERT_STORE_NO_CRYPT_RELEASE_FLAG
Esse sinalizador não é usado quando o parâmetro hCryptProv é NULL. Esse sinalizador só é válido quando um identificador de CSP NULL nãoé passado como o parâmetro hCryptProv. Definir esse sinalizador impede a liberação automática de um CSP não padrão quando o repositório de certificados é fechado.
CERT_STORE_OPEN_EXISTING_FLAG
Abra apenas um repositório existente. Se o repositório não existir, a função falhará.
CERT_STORE_READONLY_FLAG
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.
CERT_STORE_SET_LOCALIZED_NAME_FLAG
Se houver suporte para esse sinalizador, 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_REGISTRYe CERT_STORE_PROV_PHYSICAL_W.
CERT_STORE_SHARE_CONTEXT_FLAG
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 certificado, CRL ou contexto CTL nas instâncias abertas dos repositórios.
CERT_STORE_UPDATE_KEYID_FLAG
Existem listas de identificadores de chave no 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.
 

Os tipos de provedor CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYe 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 do repositório do sistema é aberto em relação ao HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEou HKEY_USERS chave predefinida do Registro. Para obter mais informações, consulte Locais do Repositório de Sistemas.

Os sinalizadores de palavra alta a seguir substituem esse comportamento padrão.

Valor Significado
CERT_SYSTEM_STORE_RELOCATE_FLAG
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.
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
Por padrão, quando o repositório "Raiz" do CurrentUser é aberto, todas as raízes de 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 verificação da lista raiz protegida é feita.
 

O provedor de CERT_STORE_PROV_REGISTRY usa os seguintes sinalizadores de palavra alta.

Valor Significado
CERT_REGISTRY_STORE_REMOTE_FLAG
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.
CERT_REGISTRY_STORE_SERIALIZED_FLAG
O provedor de 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 está definido, as adições de armazenamento, 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.

 

Os tipos de provedor de CERT_STORE_PROV_FILE e CERT_STORE_PROV_FILENAME usam os seguintes sinalizadores de palavra alta.

Valor Significado
CERT_FILE_STORE_COMMIT_ENABLE
Definir esse sinalizador confirma quaisquer adições ao repositório ou quaisquer alterações feitas em propriedades de contextos no repositório de arquivos quando CertCloseStore é chamado ou quando CertControlStore é chamado com CERT_STORE_CONTROL_COMMIT.

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
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
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 .
CERT_LDAP_STORE_OPENED_FLAG
Use esse sinalizador para usar uma sessão LDAP existente. Quando esse sinalizador é especificado, o parâmetro pvPara é o endereço de uma estrutura de CERT_LDAP_STORE_OPENED_PARA que contém informações sobre a sessão LDAP a ser usada.
CERT_LDAP_STORE_SIGN_FLAG
Para fornecer a 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.
CERT_LDAP_STORE_UNBIND_FLAG
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 estiver 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 outros parâmetros.

Valor de retorno

Se a função for bem-sucedida, a função retornará um identificador para o repositório de certificados . Quando terminar de usar o repositório, libere o identificador chamando a função CertCloseStore.

Se a função falhar, ela retornará NULL. Para obter informações de erro estendidas, chame GetLastError.

ObservaçãoCreateFile, readFile ou erros de registro podem ser propagados e seus códigos de erro retornados. CertOpenStore tem um único código de erro próprio, o código ERROR_FILE_NOT_FOUND, que indica que a função não pôde localizar o provedor especificado pelo parâmetro lpszStoreProvider.
 

Observações

Um repositório de sistema é uma coleção que consiste em um ou mais repositórios irmãos físicos. Para cada repositório do sistema, há repositórios irmãos físicos predefinidos. Depois de abrir um repositório do sistema, como "My" no CERT_SYSTEM_STORE_CURRENT_USER, CertOpenStore é chamado para abrir todos os repositórios físicos na coleção de repositórios do sistema. Cada um desses repositórios físicos é adicionado à coleção de repositórios do sistema usando a função CertAddStoreToCollection. Todos os certificados, CRLs e CTLs nesses repositórios físicos estão disponíveis por meio da coleção de repositórios do sistema lógico.

Observação A ordem do contexto do certificado pode não ser preservada dentro do repositório. Para acessar um certificado específico, você deve iterar entre os certificados no repositório.
 

Os seguintes locais de repositório do sistema podem ser abertos remotamente:

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

Os locais do repositório do sistema são abertos remotamente prefixando o nome do repositório na cadeia de caracteres passada para pvPara com o nome do computador. Exemplos de nomes de repositório de sistema remoto são:

  • computername\ca
  • \\ComputerName \CA
  • ComputerName \ServiceName\Trust
  • \\ComputerName \ServiceName \ de confiança

Para obter mais informações sobre repositórios de sistemas, consulte Locais do Repositório do Sistema.

Para obter mais informações sobre os repositórios migrados automaticamente, consulte de Migração do Repositório de Certificados.

Exemplos

O exemplo a seguir mostra a abertura de vários repositórios de certificados de diferentes tipos de provedor de repositório. O exemplo usa a função CreateMyDACL, definida no tópico Criando uma DACL, para garantir que o arquivo aberto seja criado com uma DACL adequada. Para obter mais exemplos de abertura de outros tipos de provedor de repositório, consulte Exemplo de código C para abrir repositórios 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
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho wincrypt.h
biblioteca Crypt32.lib
de DLL Crypt32.dll

Consulte também

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore

CertSaveStore

Funções do repositório de certificados