Funzione CertAddCertificateContextToStore (wincrypt.h)

La funzione CertAddCertificateContextToStore aggiunge un contesto di certificato all'archivio certificati.

Sintassi

BOOL CertAddCertificateContextToStore(
  [in]            HCERTSTORE     hCertStore,
  [in]            PCCERT_CONTEXT pCertContext,
  [in]            DWORD          dwAddDisposition,
  [out, optional] PCCERT_CONTEXT *ppStoreContext
);

Parametri

[in] hCertStore

Handle di un archivio certificati.

[in] pCertContext

Puntatore alla struttura CERT_CONTEXT da aggiungere all'archivio.

[in] dwAddDisposition

Specifica l'azione da eseguire se esiste già un certificato corrispondente o un collegamento a un certificato corrispondente nell'archivio. I valori di eliminazione attualmente definiti e i relativi usi sono i seguenti.

Valore Significato
CERT_STORE_ADD_ALWAYS
La funzione non verifica la presenza di un certificato corrispondente esistente o di un collegamento a un certificato corrispondente. Un nuovo certificato viene sempre aggiunto all'archivio. Ciò può causare duplicati in un archivio.
CERT_STORE_ADD_NEW
Se esiste un certificato corrispondente o un collegamento a un certificato corrispondente, l'operazione ha esito negativo. GetLastError restituisce il codice di CRYPT_E_EXISTS.
CERT_STORE_ADD_NEWER
Se esiste un certificato corrispondente o un collegamento a un certificato corrispondente e l'ora NotBefore del contesto esistente è uguale o maggiore del tempo NotBefore del nuovo contesto aggiunto, l'operazione non riesce e GetLastError restituisce il codice CRYPT_E_EXISTS.

Se l'ora NotBefore del contesto esistente è minore dell'ora di aggiunta del nuovo contesto, il certificato o il collegamento esistente viene eliminato e viene creato e aggiunto un nuovo certificato all'archivio. Se non esiste un certificato corrispondente o un collegamento a un certificato corrispondente, viene aggiunto un nuovo collegamento.

Se vengono confrontati gli elenchi di revoche di certificati (CRLs) o l'elenco di attendibilità dei certificati (CTLs), viene usato l'ora di ThisUpdate.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Se esiste un certificato corrispondente o un collegamento a un certificato corrispondente e l'ora NotBefore del contesto esistente è uguale o maggiore del tempo NotBefore del nuovo contesto aggiunto, l'operazione non riesce e GetLastError restituisce il codice CRYPT_E_EXISTS.

Se l'ora NotBefore del contesto esistente è minore dell'ora di aggiunta del nuovo contesto, il contesto esistente viene eliminato prima di creare e aggiungere il nuovo contesto. Il nuovo contesto aggiunto eredita le proprietà dal certificato esistente.

Se vengono confrontati gli elenchi di controllo degli elenchi di controllo delle chiavi o delle dll, viene usato l'ora di ThisUpdate.

CERT_STORE_ADD_REPLACE_EXISTING
Se esiste un collegamento a un certificato corrispondente, il certificato o il collegamento esistente viene eliminato e viene creato un nuovo certificato e aggiunto all'archivio. Se non esiste un certificato corrispondente o un collegamento a un certificato corrispondente, viene aggiunto un nuovo collegamento.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Se esiste un certificato corrispondente nell'archivio, il contesto esistente non viene sostituito. Il contesto esistente eredita le proprietà dal nuovo certificato.
CERT_STORE_ADD_USE_EXISTING
Se esiste un certificato corrispondente o un collegamento a un certificato corrispondente, viene aggiunto il certificato o il collegamento esistente e le proprietà del nuovo certificato. La funzione non riesce, ma non aggiunge un nuovo contesto. Se pCertContext non è NULL, il contesto esistente viene duplicato.

Se non esiste un certificato corrispondente o un collegamento a un certificato corrispondente, viene aggiunto un nuovo certificato.

[out, optional] ppStoreContext

Puntatore a un puntatore alla copia da creare del certificato aggiunto all'archivio.

Il parametro ppStoreContext può essere NULL, che indica che l'applicazione chiamante non richiede una copia del certificato aggiunto. Se viene eseguita una copia, deve essere liberata usando CertFreeCertificateContext.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è TRUE.

Se la funzione ha esito negativo, il valore restituito è FALSE. Per informazioni sull'errore estese, chiamare GetLastError. Alcuni codici di errore possibili seguono.

Codice restituito Descrizione
CRYPT_E_EXISTS
Questo valore viene restituito se CERT_STORE_ADD_NEW è impostato e il certificato esiste già nell'archivio oppure se CERT_STORE_ADD_NEWER è impostato e un certificato esiste nell'archivio con una data NotBefore maggiore o uguale alla data NotBefore del certificato da aggiungere.
E_INVALIDARG
Valore di eliminazione non valido specificato nel parametro dwAddDisposition .
 

Gli errori delle funzioni chiamate, CertAddEncodedCertificateToStore e CertSetCertificateContextProperty, possono essere propagati a questa funzione.

Commenti

Il contesto del certificato non viene duplicato usando CertDuplicateCertificateContext. La funzione crea invece una nuova copia del contesto e la aggiunge all'archivio.

Oltre al certificato codificato, CertDuplicateCertificateContext copia anche le proprietà del contesto, ad eccezione delle proprietà CERT_KEY_PROV_HANDLE_PROP_ID e CERT_KEY_CONTEXT_PROP_ID.

Per rimuovere il contesto del certificato dall'archivio certificati, usare la funzione CertDeleteCertificateFromStore .

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

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

CertAddEncodedCertificateToStore

CertSetCertificateContextProperty

Funzioni per i certificati