Função CertOpenStore (wincrypt.h)
A função CertOpenStore
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
Valor | Significado |
---|---|
|
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. |
|
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. |
|
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
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. |
|
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. |
|
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. |
|
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. |
|
Inicializa o repositório com certificados, CRLs e CTLs da mensagem criptográfica especificada. O parâmetro dwEncodingType |
|
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. |
|
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. |
|
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. |
|
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 |
|
Inicializa o repositório com certificados, CRLs e CTLs de um local de memória que contém um repositório serializado.
|
|
Não usado no momento. |
|
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 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". |
|
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". |
|
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". |
|
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
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 |
---|---|
|
Especifica a codificação de mensagens PKCS nº 7. |
|
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 de
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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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 |
|
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 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. |
|
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. |
|
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 |
---|---|
|
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 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 |
---|---|
|
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. |
|
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 |
---|---|
|
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 |
---|---|
|
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 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. |
|
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. |
|
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çõ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
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 |