CertAddStoreToCollection-Funktion (wincrypt.h)

Die CertAddStoreToCollection-Funktion fügt einem Sammlungszertifikatspeicher einen gleichgeordneten Zertifikatspeicher hinzu. Wenn einem Sammlungsspeicher ein Zertifikatspeicher hinzugefügt wurde, können alle Zertifikate, Zertifikatsperrlisten (Certificate Revocation Lists , CRLs) und Zertifikatvertrauenslisten (Certificate Trust Lists , CTLs) in dem Speicher, der dem Sammlungsspeicher hinzugefügt wurde, mithilfe von Funktionsaufrufen zum Suchen oder Aufzählen abgerufen werden, die den Sammlungsspeicher verwenden.

Syntax

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

Parameter

[in] hCollectionStore

Handle eines Zertifikatspeichers.

[in, optional] hSiblingStore

Handle eines gleichgeordneten Speichers, der dem Sammlungsspeicher hinzugefügt werden soll. Weitere Informationen finden Sie in den Hinweisen.

[in] dwUpdateFlags

Gibt an, ob Zertifikate, ZERTIFIKATsperrlisten und CTLs dem neuen element des gleichgeordneten Speichers des Sammlungsspeichers hinzugefügt werden können. Um das Hinzufügen zu aktivieren, legen Sie dwUpdateFlag auf CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG fest. Um Ergänzungen zu deaktivieren, legen Sie dwUpdateFlag auf 0 (null) fest.

[in] dwPriority

Legt eine Prioritätsebene des neuen Speichers in der Auflistung fest, wobei null die niedrigste Priorität ist. Wenn null für diesen Parameter übergeben wird, wird der angegebene Speicher als letzter Speicher in der Auflistung angefügt. Die Prioritätsebenen der Speicher in einer Auflistung bestimmen die Reihenfolge, in der die Speicher aufgezählt werden, und die Suchreihenfolge der Speicher, wenn versucht wird, ein Zertifikat, eine Zertifikatsperrliste oder eine Zertifikatsperrliste abzurufen. Prioritätsebenen bestimmen auch, welchem Speicher einer Sammlung ein neues Zertifikat, eine neue Zertifikatsperrliste oder eine CTL hinzugefügt wird. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion ungleich null zurück, und der Auflistung der Speicher wird ein neuer Speicher hinzugefügt.

Wenn die Funktion fehlschlägt, gibt sie null zurück, und der Speicher wurde nicht hinzugefügt.

Hinweise

Ein Sammlungsspeicher verfügt über das gleiche HCERTSTORE-Handle wie ein einzelner Speicher. Daher gelten fast alle Funktionen, die für einen Zertifikatspeicher gelten, auch für jeden Sammlungsspeicher. Enumerations- und Suchprozesse umfassen alle Speicher in einem Sammlungsspeicher. Funktionen wie CertAddCertificateLinkToStore , die Links zu Speichern hinzufügen, können jedoch nicht mit Sammlungsspeichern verwendet werden.

Wenn einem Sammlungsspeicher ein Zertifikat, eine Zertifikatsperrliste oder eine Zertifikatsperrliste hinzugefügt wird, wird die Liste der gleichgeordneten Speicher in der Sammlung prioritär durchsucht, um den ersten Speicher zu finden, der das Hinzufügen ermöglicht. Das Hinzufügen ist aktiviert, wenn CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG im CertAddStoreToCollection-Aufruf festgelegt wurde. Wenn ein Speicher, der das Hinzufügen zulässt, bei jeder Funktion, die einem Speicher Elemente hinzufügt, nicht erfolgreich ist, wird die Additionsfunktion mit dem nächsten Speicher fortgesetzt, ohne eine Benachrichtigung bereitzustellen.

Wenn ein Sammlungsspeicher und seine gleichgeordneten Speicher mit CertCloseStore mithilfe von CERT_CLOSE_STORE_FORCE_FLAG geschlossen werden, muss der Sammlungsspeicher vor seinen gleichgeordneten Speichern geschlossen werden. Wenn CERT_CLOSE_STORE_FORCE_FLAG nicht verwendet wird, können die Geschäfte in beliebiger Reihenfolge geschlossen werden.

Beispiele

Das folgende Beispiel zeigt das Hinzufügen eines gleichgeordneten Zertifikatspeichers zu einem Sammlungszertifikatspeicher. Ein vollständiges Beispiel, einschließlich des vollständigen Kontexts für dieses Beispiel, finden Sie unter Beispiel-C-Programm: Vorgänge zum Sammlungs- und gleichgeordneten Zertifikatspeicher.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CertRemoveStoreFromCollection

Zertifikatspeicherfunktionen