Funzione CertAddStoreToCollection (wincrypt.h)

La funzione CertAddStoreToCollection aggiunge un archivio certificati di pari livello a un archivio certificati di raccolta. Quando un archivio certificati è stato aggiunto a un archivio raccolte, è possibile recuperare tutti i certificati, gli elenchi di revoche di certificati (CRL) e gli elenchi di attendibilità certificati nell'archivio aggiunto all'archivio raccolte usando chiamate di funzione di ricerca o di enumerazione che usano l'archivio raccolte.

Sintassi

BOOL CertAddStoreToCollection(
  [in]           HCERTSTORE hCollectionStore,
  [in, optional] HCERTSTORE hSiblingStore,
  [in]           DWORD      dwUpdateFlags,
  [in]           DWORD      dwPriority
);

Parametri

[in] hCollectionStore

Handle di un archivio certificati.

[in, optional] hSiblingStore

Handle di un archivio di pari livello da aggiungere all'archivio di raccolta. Per altre informazioni, vedere la sezione Osservazioni.

[in] dwUpdateFlags

Indica se è possibile aggiungere certificati, CRL e CRL al nuovo membro dell'archivio di pari livello dell'archivio raccolte. Per abilitare l'aggiunta, impostare dwUpdateFlag su CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG. Per disabilitare le aggiunte, impostare dwUpdateFlag su zero.

[in] dwPriority

Imposta un livello di priorità del nuovo archivio nella raccolta, con zero la priorità più bassa. Se per questo parametro viene passato zero, l'archivio specificato viene aggiunto come ultimo archivio nella raccolta. I livelli di priorità degli archivi in una raccolta determinano l'ordine in cui gli archivi vengono enumerati e l'ordine di ricerca degli archivi durante il tentativo di recuperare un certificato, un CRL o una libreria di certificati. I livelli di priorità determinano anche l'archivio di una raccolta in cui viene aggiunto un nuovo certificato, CRL o CTL. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce un valore diverso da zero e un nuovo archivio viene aggiunto alla raccolta di archivi.

Se la funzione ha esito negativo, restituisce zero e l'archivio non è stato aggiunto.

Commenti

Un archivio di raccolta ha lo stesso handle HCERTSTORE di un singolo archivio; pertanto, quasi tutte le funzioni che si applicano a qualsiasi archivio certificati si applicano anche a qualsiasi archivio di raccolta. I processi di enumerazione e ricerca si estendono su tutti i negozi in un archivio di raccolta; Tuttavia, le funzioni come CertAddCertificateLinkToStore che aggiungono collegamenti agli archivi non possono essere usate con gli archivi di raccolta.

Quando un certificato, CRL o CTL viene aggiunto a un archivio di raccolte, viene eseguita la ricerca nell'elenco di archivi di pari livello nella raccolta in ordine di priorità per trovare il primo archivio che consente l'aggiunta. L'aggiunta è abilitata se CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG è stato impostato nella chiamata CertAddStoreToCollection . Con qualsiasi funzione che aggiunge elementi a un archivio, se un archivio che consente l'aggiunta non restituisce esito positivo, la funzione di addizione continua all'archivio successivo senza fornire notifiche.

Quando un archivio di raccolta e i relativi archivi di pari livello vengono chiusi con CertCloseStore tramite CERT_CLOSE_STORE_FORCE_FLAG, l'archivio di raccolta deve essere chiuso prima dei negozi di pari livello. Se CERT_CLOSE_STORE_FORCE_FLAG non viene utilizzato, gli archivi possono essere chiusi in qualsiasi ordine.

Esempio

Nell'esempio seguente viene illustrato l'aggiunta di un archivio certificati di pari livello a un archivio certificati di raccolta. Per un esempio completo che include il contesto completo per questo esempio, vedere Esempio di programma C: operazioni di raccolta e archivio certificati di pari livello.

//-------------------------------------------------------------------
// Declare and initialize variables.

HCERTSTORE  hCollectionStore = NULL;     // The collection store 
                                         // handle
HCERTSTORE  hMemoryStore = NULL;         // A memory store handle
LPCSTR pszFileName = "TestStor.sto";     // Output file name
LPWSTR pswzFirstCert = L"Full Test Cert";// Subject of the first
                                         // certificate
LPWSTR pswzSecondCert = L"Microsoft";    // Subject of the second 
                                         // certificate
//-------------------------------------------------------------------
// Open a collection certificate store.

if(hCollectionStore = CertOpenStore(
    CERT_STORE_PROV_COLLECTION, // A collection store
    0,                          // Encoding type; not used with a
                                // collection store
    NULL,                       // Use the default provider
    0,                          // No flags
    NULL))                      // Not needed

{
    printf("The collection store was opened. \n");
}
else
{
    printf( "There was an error while opening the "
        "collection store! \n");
    exit(1);
}
//-------------------------------------------------------------------
// Open a new certificate store in memory.

if(hMemoryStore = CertOpenStore(
    CERT_STORE_PROV_MEMORY,    // A memory store
    0,                         // Encoding type; not used with a
                               // memory store
    NULL,                      // Use the default provider
    0,                         // No flags
    NULL))                     // Not needed
{
    printf("The memory store was opened. \n");
}
else
{
    printf( "There was an error while opening the memory store! \n");
    exit(1);
}
//-------------------------------------------------------------------
// Add the memory store as a sibling to the collection store. 
// All certificates in the memory store and any new certificate
// added to the memory store will also be available in the 
// collection
// store.

if(CertAddStoreToCollection(
    hCollectionStore,
    hMemoryStore,
    CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG,  // New certificates can be
                                          // added to the sibling
                                          // store.
    1))                                   // The sibling store's 
                                          // priority.
                                          // Because this is the 
                                          // store with the highest
                                          // priority, certificates
                                          // added to the collection
                                          // store will actually be
                                          // stored in this store.
{
    printf("The memory store was added to the collection store.\n");
}
else
{
    printf("The memory store was not added to the "
        "collection store.\n");
    exit(1);
}


//-------------------------------------------------------------------
// The store handles must be closed.

if(CertCloseStore(hCollectionStore,
                  0))
{
    printf("The collection store was closed. \n");
}
else
{
    printf("There was an error while closing the "
        "collection store! \n");
}

if(CertCloseStore(hMemoryStore, 0))
{
    printf("The memory store was closed. \n");
}
else
{
    printf("There was an error while closing the memory store! \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

CertRemoveStoreFromCollection

Funzioni dell'archivio certificati