Funzione CertOpenStore (wincrypt.h)

La funzione CertOpenStore apre un archivio certificati usando un tipo di provider di archivio specificato. Anche se questa funzione può aprire un archivio certificati per la maggior parte dei casi, è consigliabile aprire gli archivi certificati più comuni. CertOpenStore è necessario per opzioni più complesse e casi speciali.

Sintassi

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

Parametri

[in] lpszStoreProvider

Puntatore a una stringa ANSI con terminazione Null che contiene il tipo di provider dell'archivio.

I valori seguenti rappresentano i tipi di archivio predefiniti. Il tipo di provider store determina il contenuto del parametro pvPara e il significato e l'uso e il significato della parola alta del parametro dwFlags . È possibile installare o registrare provider di archivi aggiuntivi usando la funzione CryptInstallOIDFunctionAddress o CryptRegisterOIDFunction . Per altre informazioni sull'aggiunta di provider di archivi, vedere Estensione della funzionalità CertOpenStore.

Valore Significato
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
Apre un archivio che sarà una raccolta di altri negozi. Gli archivi vengono aggiunti o rimossi dalla raccolta usando CertAddStoreToCollection e CertRemoveStoreFromCollection. Quando un archivio viene aggiunto a una raccolta, tutti i certificati, i CRL e gli elenchi di scopi consentiti in tale archivio diventano disponibili per le ricerche o le enumerazioni dell'archivio raccolte.

La parola alta di dwFlags è impostata su zero.

valore pvPara : il parametro pvPara deve essere NULL.

CERT_STORE_PROV_FILE
Inizializza l'archivio con certificati, CRL e CRL letti da un file aperto specificato. Questo provider prevede che il file contenga solo un archivio serializzato e non messaggi firmati PKCS #7 o un singolo certificato codificato.

Il puntatore al file deve essere posizionato all'inizio delle informazioni sull'archivio serializzato. Dopo che i dati nell'archivio serializzato sono stati caricati nell'archivio certificati, il puntatore al file viene posizionato all'inizio di tutti i dati che possono seguire i dati dell'archivio serializzato nel file. Se CERT_FILE_STORE_COMMIT_ENABLE è impostato in dwFlags, l'handle di file viene duplicato e l'archivio viene sempre eseguito il commit come archivio serializzato. Il file non viene chiuso quando l'archivio viene chiuso.

valore pvPara : il parametro pvPara deve contenere un puntatore all'handle di un file aperto tramite CreateFile.

CERT_STORE_PROV_FILENAME_A
Inizializza l'archivio con certificati, CRL e CRL da un file. Il provider apre il file e tenta prima di tutto di leggere il file come archivio serializzato, quindi come messaggio firmato PKCS #7 e infine come singolo certificato codificato.

Il parametro dwEncodingType deve contenere i tipi di codifica da usare sia con i messaggi che con i certificati. Se il file contiene un certificato con codifica X.509 , l'operazione di apertura ha esito negativo e una chiamata alla funzione GetLastError restituirà ERROR_ACCESS_DENIED. Se il flag CERT_FILE_STORE_COMMIT_ENABLE è impostato in dwFlags, il valore dwCreationDisposition passato a CreateFile è il seguente:

  • Se il flag CERT_STORE_CREATE_NEW_FLAG è impostato, CreateFile usa CREATE_NEW.
  • Se il flag di CERT_STORE_OPEN_EXISTING_FLAG è impostato, CreateFile usa OPEN_EXISTING.
  • Per tutte le altre impostazioni di dwFlags, CreateFile usa OPEN_ALWAYS.

Se dwFlags include CERT_FILE_STORE_COMMIT_ENABLE, viene eseguito il commit del file come PKCS #7 o come archivio serializzato a seconda del tipo di file aperto. Se il file è vuoto o se il nome del file ha un'estensione p7c o spc, viene eseguito il commit del file come PKCS #7. In caso contrario, viene eseguito il commit del file come archivio serializzato.

valore pvPara : il parametro pvPara deve contenere un puntatore a una stringa ANSI con terminazione Null contenente il nome di un file esistente non aperto.

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
Uguale a CERT_STORE_PROV_FILENAME_A.

valore pvPara : il parametro pvPara deve contenere un puntatore a una stringa Unicode con terminazione Null contenente il nome di un file esistente non aperto.

CERT_STORE_PROV_LDAP(_W)
sz_CERT_STORE_PROV_LDAP(_W)
Inizializza l'archivio con certificati, CRL e CRL dai risultati di una query LDAP.

Per eseguire operazioni di scrittura nell'archivio, la stringa di query deve specificare una query BASE senza filtro e un singolo attributo.

valore pvPara : se il parametro dwFlags contiene CERT_LDAP_STORE_OPENED_FLAG, impostare pvPara sull'indirizzo di una struttura CERT_LDAP_STORE_OPENED_PARA che specifica la sessione LDAP stabilita da usare.

In caso contrario, impostare pvPara in modo che punti a una stringa Unicode con terminazione Null contenente la stringa di query LDAP. Per altre informazioni sulle stringhe di query LDAP, vedere Dialetto LDAP.

CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY
Crea un archivio certificati nella memoria memorizzata nella cache. All'interno dell'archivio non vengono inizialmente caricati certificati, elenchi di revoche di certificati (CRL) o elenchi di certificati attendibili. In genere viene usato per creare un archivio temporaneo.

Qualsiasi aggiunta di certificati, CRL o CRL o modifiche alle proprietà di certificati, CRL o CRL in un archivio di memoria non viene salvata automaticamente. Possono essere salvati in un file o in un BLOB di memoria usando CertSaveStore.

valore pvPara : il parametro pvPara non viene usato.

CERT_STORE_PROV_MSG
Inizializza l'archivio con certificati, CRL e CRL dal messaggio di crittografia specificato. Il parametro dwEncodingType deve contenere i tipi di codifica usati con messaggi e certificati.

pvPara value: il parametro pvPara contiene un handle HCRYPTMSG del messaggio codificato, restituito da una chiamata a CryptMsgOpenToDecode.

CERT_STORE_PROV_PHYSICAL(_W)
sz_CERT_STORE_PROV_PHYSICAL(_W)
Inizializza l'archivio con certificati, CRL e CRL da un archivio fisico specificato membro di un archivio di sistema logico.

Due nomi sono separati da una barra rovesciata (\), ad esempio "Root.Default". In questo caso, "Root" è il nome dell'archivio di sistema e ". Default" è il nome dell'archivio fisico. I nomi di archivio fisico e di sistema non possono contenere barre rovesciata. La parola alta di dwFlags indica la posizione dell'archivio di sistema, in genere CERT_SYSTEM_STORE_CURRENT_USER. Per altre informazioni, vedere dwFlags più avanti in questo argomento e vedere Percorsi dell'archivio di sistema. Alcune posizioni dei negozi fisici possono essere aperte in remoto.

valore pvPara : il parametro pvPara punta a una stringa Unicode con terminazione Null che contiene sia il nome dell'archivio di sistema che i nomi fisici.

CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7
Inizializza l'archivio con certificati, CRL e CCL da un messaggio firmato PKCS #7 codificato. Il parametro dwEncodingType deve specificare i tipi di codifica da usare sia con i messaggi che con i certificati.

valore pvPara : il parametro pvPara punta a una struttura CRYPT_DATA_BLOB che rappresenta il messaggio codificato.

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
Inizializza l'archivio con il contenuto di un pacchetto PKCS #12 .

Se il pacchetto PKCS #12 è protetto con una password NULL o vuota, questa funzione avrà esito positivo nell'apertura dell'archivio.

A partire da Windows 8 e Windows Server 2012, se la password incorporata nel pacchetto PFX è stata protetta in un'entità Active Directory (AD) e l'utente corrente, come membro di tale entità, dispone dell'autorizzazione per decrittografare la password, questa funzione avrà esito positivo nell'apertura dell'archivio. Per altre informazioni, vedere il parametro pvPara e il flag PKCS12_PROTECT_TO_DOMAIN_SIDS della funzione PFXExportCertStoreEx .

È possibile proteggere le password PFX in un'entità di Active Directory a partire da Windows 8 e Windows Server 2012.

pvPara value: il parametro pvPara punta a una struttura CRYPT_DATA_BLOB che rappresenta il pacchetto PKCS #12.

CERT_STORE_PROV_REG
Inizializza l'archivio con certificati, CRL e CRL da una sottochiave del Registro di sistema.

Questo provider apre o crea le sottochiavi del Registro di sistema Certificati, CRL e CRL nella chiave passata in pvPara. La chiave di input non viene chiusa dal provider. Prima di restituire, il provider apre la propria copia della chiave passata in pvPara. Se CERT_STORE_READONLY_FLAG è impostato nella parola bassa di dwFlags, le sottochiavi del Registro di sistema vengono aperte usando RegOpenKey con KEY_READ_ACCESS. In caso contrario, le sottochiavi del Registro di sistema vengono create usando RegCreateKey con KEY_ALL_ACCESS. Tutte le modifiche apportate al contenuto dell'archivio aperto vengono immediatamente rese persistenti nel Registro di sistema. Tuttavia, se CERT_STORE_READONLY_FLAG è impostato nella parola bassa di dwFlags, qualsiasi tentativo di aggiungere al contenuto dell'archivio o di modificare la proprietà di un contesto genera un errore con GetLastError che restituisce il codice E_ACCESSDENIED.

pvPara value: il parametro pvPara contiene l'handle di una chiave del Registro di sistema aperta.

CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED
Inizializza l'archivio con certificati, CCL e DLL da una posizione di memoria contenente un archivio serializzato.

valore pvPara : il parametro pvPara punta a una struttura CRYPT_DATA_BLOB che contiene il BLOB di memoria serializzato.

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
Attualmente non utilizzato.
CERT_STORE_PROV_SYSTEM_A
Inizializza l'archivio con certificati, CCL e CTL dall'archivio di sistema specificato.

L'archivio di sistema è un archivio di raccolta logico e logico costituito da uno o più archivi fisici. Un archivio fisico associato a un archivio di sistema viene registrato con la funzione CertRegisterPhysicalStore . Dopo l'apertura dell'archivio di sistema, tutti gli archivi fisici associati vengono aperti anche dalle chiamate a CertOpenStore e vengono aggiunti alla raccolta di archivi di sistema usando la funzione CertAddStoreToCollection . La parola alta di dwFlags indica la posizione dell'archivio di sistema, in genere impostata su CERT_SYSTEM_STORE_CURRENT_USER. Per informazioni dettagliate sulle posizioni del Registro di sistema, vedere dwFlags più avanti in questo argomento e percorsi di System Store. Alcune posizioni dell'archivio di sistema possono essere aperte in remoto; per altre informazioni, vedere Percorsi dell'archivio di sistema.

valore pvPara : il parametro pvPara punta a una stringa ANSI con terminazione null contenente un nome dell'archivio di sistema, ad esempio "My" o "Root".

CERT_STORE_PROV_SYSTEM(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
Uguale a CERT_STORE_PROV_SYSTEM_A.

valore pvPara : il parametro pvPara punta a una stringa Unicode con terminazione null contenente un nome dell'archivio di sistema, ad esempio "My" o "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY_A
Inizializza l'archivio con certificati, CCL e CTL da un archivio del Registro di sistema fisico. L'archivio fisico non viene aperto come archivio raccolta. Le enumerazioni e le ricerche passano attraverso solo i certificati, gli elenchi di controllo di accesso e le dll in tale archivio fisico.

La parola alta di dwFlags indica la posizione dell'archivio di sistema, in genere impostata su CERT_SYSTEM_STORE_CURRENT_USER. Per altre informazioni, vedere dwFlags più avanti in questo argomento. Alcune posizioni dell'archivio di sistema possono essere aperte in remoto; per altre informazioni, vedere Percorsi dell'archivio di sistema.

valore pvPara : il parametro pvPara punta a una stringa ANSI con terminazione null contenente un nome dell'archivio di sistema, ad esempio "My" o "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
Uguale a CERT_STORE_PROV_SYSTEM_REGISTRY_A.

valore pvPara : il parametro pvPara punta a una stringa Unicode con terminazione null contenente un nome dell'archivio di sistema, ad esempio "My" o "Root".

[in] dwEncodingType

Specifica il tipo di codifica del certificato e il tipo di codifica dei messaggi. La codifica viene usata solo quando il parametro dwSaveAs della funzione CertSaveStore contiene CERT_STORE_SAVE_AS_PKCS7. In caso contrario, il parametro dwMsgAndCertEncodingType non viene usato.

Questo parametro è applicabile solo quando il tipo di provider CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7 o CERT_STORE_PROV_FILENAME viene specificato nel parametro lpszStoreProvider . Per tutti gli altri tipi di provider, questo parametro è inutilizzato e deve essere impostato su zero.

Questo parametro può essere una combinazione di uno o più dei valori seguenti.

Valore Significato
PKCS_7_ASN_ENCODING
65536 (0x10000)
Specifica la codifica dei messaggi PKCS #7.
X509_ASN_ENCODING
1 (0x1)
Specifica la codifica del certificato X.509.

[in] hCryptProv

Questo parametro non viene usato e deve essere impostato su NULL.

Windows Server 2003 e Windows XP: Handle a un provider di crittografia. Il passaggio di NULL per questo parametro causa l'uso di un provider predefinito appropriato. È consigliabile usare il provider predefinito. Il provider di crittografia predefinito o specificato viene usato per tutte le funzioni di archiviazione che verificano la firma di un certificato soggetto o CRL. Il tipo di dati di questo parametro è HCRYPTPROV.

[in] dwFlags

Questi valori sono costituiti da valori con parole elevate e di parole basse combinate usando un'operazione BIT-OR .

La parte bassa di dwFlags controlla un'ampia gamma di caratteristiche generali dell'archivio certificati aperto. Questa parte può essere usata con tutti i tipi di provider di archiviazione. La parte bassa di dwFlags può essere uno dei valori seguenti.

Valore Significato
CERT_STORE_BACKUP_RESTORE_FLAG
Usare i privilegi di SE_BACKUP_NAME e SE_RESTORE_NAME del thread per aprire archivi di sistema basati su file o registro. Se il thread non dispone di questi privilegi, questa funzione deve non riuscire con un errore di accesso negato.
CERT_STORE_CREATE_NEW_FLAG
Se non esiste un nuovo archivio, viene creato un nuovo archivio. La funzione ha esito negativo se l'archivio esiste già.

Se non CERT_STORE_OPEN_EXISTING_FLAG né CERT_STORE_CREATE_NEW_FLAG è impostato, un archivio viene aperto se esiste o viene aperto e aperto se non esiste già.

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
Rinviare la chiusura del provider dell'archivio fino a quando tutti i certificati, gli elenchi di controllo di accesso o gli elenchi di controllo di accesso ottenuti dall'archivio non sono più in uso. L'archivio viene effettivamente chiuso quando l'ultimo certificato, CRL o CTL ottenuto dall'archivio viene liberato. Tutte le modifiche apportate alle proprietà di questi certificati, CCL e CTLs, anche dopo la chiamata a CertCloseStore, vengono mantenute.

Se questo flag non è impostato e i certificati, gli elenchi di controllo di accesso o gli elenchi di controllo di dominio ottenuti dall'archivio sono ancora in uso, tutte le modifiche apportate alle proprietà di tali certificati, ccl e elenchi di controllo non verranno mantenute.

Se questa funzione viene chiamata con CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG viene ignorata.

Quando questo flag è impostato e viene passato un valore di parametro hCryptProv diverso da NULL, tale provider continuerà a essere usato anche dopo la chiamata a questa funzione.

CERT_STORE_DELETE_FLAG
L'archivio viene eliminato invece di essere aperto. Questa funzione restituisce NULL sia per l'esito positivo che per l'errore dell'eliminazione. Per determinare l'esito positivo dell'eliminazione, chiamare GetLastError, che restituisce zero se l'archivio è stato eliminato e un valore diverso da zero se non è stato eliminato.
CERT_STORE_ENUM_ARCHIVED_FLAG
In genere, un'enumerazione di tutti i certificati nell'archivio ignorerà qualsiasi certificato con il set di proprietà CERT_ARCHIVED_PROP_ID . Se questo flag è impostato, un'enumerazione dei certificati nell'archivio conterrà tutti i certificati nell'archivio, inclusi quelli con la proprietà CERT_ARCHIVED_PROP_ID .
CERT_STORE_MAXIMUM_ALLOWED_FLAG
Aprire l'archivio con il set massimo di autorizzazioni consentite. Se questo flag viene specificato, gli archivi del Registro di sistema vengono prima aperti con l'accesso in scrittura e, se non riesce, vengono riaperti con accesso di sola lettura.
CERT_STORE_NO_CRYPT_RELEASE_FLAG
Questo flag non viene usato quando il parametro hCryptProv è NULL. Questo flag è valido solo quando un handle CSP non NULL viene passato come parametro hCryptProv . L'impostazione di questo flag impedisce la versione automatica di un CSP non definito quando l'archivio certificati viene chiuso.
CERT_STORE_OPEN_EXISTING_FLAG
Aprire solo un archivio esistente. Se l'archivio non esiste, la funzione ha esito negativo.
CERT_STORE_READONLY_FLAG
Aprire l'archivio in modalità di sola lettura. Qualsiasi tentativo di modifica del contenuto dell'archivio genera un errore. Quando questo flag è impostato e viene usato un provider di archivi basato sul Registro di sistema, le sottochiave del Registro di sistema vengono aperte usando RegOpenKey con KEY_READ_ACCESS. In caso contrario, le sottochiavi del Registro di sistema vengono create usando RegCreateKey con KEY_ALL_ACCESS.
CERT_STORE_SET_LOCALIZED_NAME_FLAG
Se questo flag è supportato, il provider imposta la proprietà CERT_STORE_LOCALIZED_NAME_PROP_ID dell'archivio. Il nome localizzato può essere recuperato chiamando la funzione CertGetStoreProperty con dwPropID impostata su CERT_STORE_LOCALIZED_NAME_PROP_ID. Questo flag è supportato per i provider di tipi CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY eCERT_STORE_PROV_PHYSICAL_W.
CERT_STORE_SHARE_CONTEXT_FLAG
Quando si apre un archivio più volte, è possibile impostare questo flag per garantire un utilizzo efficiente della memoria riutilizzando la memoria per le parti codificate di un certificato, una CRL o un contesto CTL nelle istanze aperte degli archivi.
CERT_STORE_UPDATE_KEYID_FLAG
Elenchi di identificatori di chiave esistono all'interno di CurrentUser e LocalMachine. Questi identificatori di chiave hanno proprietà molto simili alle proprietà dei certificati. Se la CERT_STORE_UPDATE_KEYID_FLAG è impostata, per ogni identificatore di chiave nel percorso dell'archivio con una proprietà CERT_KEY_PROV_INFO_PROP_ID , tale proprietà viene aggiornata automaticamente dalla proprietà dell'identificatore di chiave CERT_KEY_PROV_INFO_PROP_ID o dalla CERT_KEY_IDENTIFIER_PROP_ID del certificato correlato a tale identificatore di chiave.
 

I tipi di provider CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRY e CERT_STORE_PROV_PHYSICAL usano le parole elevate seguenti di dwFlags per specificare i percorsi del Registro di sistema dell'archivio di 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

Per impostazione predefinita, un percorso dell'archivio di sistema viene aperto rispetto al HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE o HKEY_USERS chiave predefinita del Registro di sistema. Per altre informazioni, vedere Percorsi dell'archivio di sistema.

I flag ad alta parola seguenti sostituiscono questo comportamento predefinito.

Valore Significato
CERT_SYSTEM_STORE_RELOCATE_FLAG
Se impostato, pvPara deve contenere un puntatore a una struttura CERT_SYSTEM_STORE_RELOCATE_PARA anziché a una stringa. La struttura indica sia il nome dell'archivio che il relativo percorso nel Registro di sistema.
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
Per impostazione predefinita, quando viene aperto l'archivio CurrentUser "Root", tutte le radici SystemRegistry non presenti nell'elenco radice protetto vengono eliminate dalla cache prima che questa funzione restituisca. Quando questo flag è impostato, questo valore predefinito viene sottoposto a override e tutte le radici in SystemRegistry vengono restituite e non viene eseguita alcuna verifica dell'elenco radice protetto.
 

Il provider di CERT_STORE_PROV_REGISTRY utilizza i flag di parola alta seguenti.

Valore Significato
CERT_REGISTRY_STORE_REMOTE_FLAG
pvPara contiene un handle per una chiave del Registro di sistema in un computer remoto. Per accedere a una chiave del Registro di sistema in un computer remoto, è necessario impostare le autorizzazioni di sicurezza nel computer remoto per consentire l'accesso. Per altre informazioni, vedere la sezione Osservazioni.
CERT_REGISTRY_STORE_SERIALIZED_FLAG
Il provider di CERT_STORE_PROV_REG salva certificati, CRL e CCL in una singola sottochiave dell'archivio serializzato anziché eseguire l'operazione di salvataggio predefinita. Il valore predefinito è che ogni certificato, CRL o CTL viene salvato come sottochiave separata del Registro di sistema nella sottochiave appropriata.

Questo flag viene usato principalmente per gli archivi scaricati dal modello di criteri di gruppo (GPT), ad esempio gli archivi CurrentUserGroupPolicy e LocalMachineGroupPolicy.

Quando CERT_REGISTRY_STORE_SERIALIZED_FLAG è impostato, le aggiunte, le eliminazioni o le modifiche alle proprietà dell'archivio non vengono mantenute finché non viene eseguita una chiamata a CertCloseStore o CertControlStore usando CERT_STORE_CTRL_COMMIT.

 

I tipi di provider CERT_STORE_PROV_FILE e CERT_STORE_PROV_FILENAME usano i flag di parola alta seguenti.

Valore Significato
CERT_FILE_STORE_COMMIT_ENABLE
L'impostazione di questo flag esegue il commit di eventuali aggiunte all'archivio o di eventuali modifiche apportate alle proprietà dei contesti nell'archivio nell'archivio file quando viene chiamato CertCloseStore o quando viene chiamato CertControlStore con CERT_STORE_CONTROL_COMMIT.

CertOpenStore ha esito negativo con E_INVALIDARG se sia CERT_FILE_STORE_COMMIT_ENABLE che CERT_STORE_READONLY_FLAG sono impostati in dwFlags.

 

Il tipo di provider CERT_STORE_PROV_LDAP utilizza i flag di parola alta seguenti.

Valore Significato
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
Esegue una ricerca DNS solo record A sull'URL denominato nel parametro pvPara . Ciò impedisce la generazione di false query DNS durante la risoluzione dei nomi host URL. Usare questo flag quando si passa un nome host anziché un nome di dominio per il parametro pvPara .
CERT_LDAP_STORE_OPENED_FLAG
Usare questo flag per usare una sessione LDAP esistente. Quando si specifica questo flag, il parametro pvPara è l'indirizzo di una struttura CERT_LDAP_STORE_OPENED_PARA che contiene informazioni sulla sessione LDAP da usare.
CERT_LDAP_STORE_SIGN_FLAG
Per garantire l'integrità richiesta da alcune applicazioni, firmare digitalmente tutto il traffico LDAP da e verso un server LDAP usando il protocollo di autenticazione Kerberos.
CERT_LDAP_STORE_UNBIND_FLAG
Usare questo flag con il flag CERT_LDAP_STORE_OPENED_FLAG per fare in modo che la sessione LDAP non venga associata quando l'archivio viene chiuso. Il sistema annulla l'associazione della sessione LDAP usando la funzione ldap_unbind quando l'archivio viene chiuso.

[in] pvPara

Valore a 32 bit che può contenere informazioni aggiuntive per questa funzione. Il contenuto di questo parametro dipende dal valore di lpszStoreProvider e da altri parametri.

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce un handle all'archivio certificati. Al termine dell'uso dell'archivio, rilasciare l'handle chiamando la funzione CertCloseStore .

Se la funzione ha esito negativo, restituisce NULL. Per informazioni sugli errori estesi, chiamare GetLastError.

Nota: Gli errori CreateFile, ReadFile o Registro di sistema potrebbero essere propagati e i relativi codici di errore restituiti. CertOpenStore ha un singolo codice di errore, il codice ERROR_FILE_NOT_FOUND, che indica che la funzione non è riuscita a trovare il provider specificato dal parametro lpszStoreProvider .
 

Commenti

Un archivio di sistema è una raccolta costituita da uno o più archivi di pari livello fisici. Per ogni archivio di sistema sono disponibili archivi fisici di pari livello predefiniti. Dopo aver aperto un archivio di sistema, ad esempio "My" in CERT_SYSTEM_STORE_CURRENT_USER, CertOpenStore viene chiamato per aprire tutti gli archivi fisici nella raccolta di archivi di sistema. Ognuno di questi archivi fisici viene aggiunto alla raccolta di archivi di sistema usando la funzione CertAddStoreToCollection . Tutti i certificati, i CRL e gli elenchi di scopi consentiti in tali archivi fisici sono disponibili tramite la raccolta di archivi di sistema logici.

Nota L'ordine del contesto del certificato potrebbe non essere mantenuto all'interno dell'archivio. Per accedere a un certificato specifico, è necessario scorrere i certificati nell'archivio.
 

I percorsi di archiviazione di sistema seguenti possono essere aperti in remoto:

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

I percorsi dell'archivio di sistema vengono aperti in remoto anteponendo il nome dell'archivio nella stringa passata a pvPara con il nome del computer. Di seguito sono riportati alcuni esempi di nomi di archivio di sistema remoti:

  • ComputerName\CA
  • \\ComputerName\CA
  • ComputerName\ServiceName\Trust
  • \\ComputerName\ServiceName\Trust

Per altre informazioni sugli archivi di sistema, vedere Percorsi dell'archivio di sistema.

Per altre informazioni sugli archivi di cui viene eseguita la migrazione automatica, vedere Migrazione dell'archivio certificati.

Esempio

L'esempio seguente mostra l'apertura di diversi archivi certificati di diversi tipi di provider di archivi. Nell'esempio viene utilizzata la funzione CreateMyDACL , definita nell'argomento Creazione di un daCL , per assicurarsi che il file aperto venga creato con un DACL appropriato. Per altri esempi di apertura di altri tipi di provider di archivi, vedere Codice C di esempio per l'apertura di archivi certificati.

//-------------------------------------------------------------------
// 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");
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Crypt32.lib
DLL Crypt32.dll

Vedi anche

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore

CertSaveStore

Funzioni dell'archivio certificati