Freigeben über


CertOpenStore-Funktion (wincrypt.h)

Die CertOpenStore--Funktion öffnet einen Zertifikatspeicher mithilfe eines angegebenen Speicheranbietertyps. Diese Funktion kann zwar einen Zertifikatspeicher für die meisten Zwecke öffnen, CertOpenSystemStore wird jedoch empfohlen, die am häufigsten verwendeten Zertifikatspeicher zu öffnen. CertOpenStore- ist für komplexere Optionen und Sonderfälle erforderlich.

Syntax

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

Parameter

[in] lpszStoreProvider

Ein Zeiger auf eine MIT NULL beendete ANSI-Zeichenfolge, die den Speicheranbietertyp enthält.

Die folgenden Werte stellen die vordefinierten Speichertypen dar. Der Store-Anbietertyp bestimmt den Inhalt des pvPara- Parameters sowie die Verwendung und Bedeutung des hohen Worts des dwFlags-Parameters. Zusätzliche Speicheranbieter können mithilfe der funktion CryptInstallOIDFunctionAddress oder CryptRegisterOIDFunction installiert oder registriert werden. Weitere Informationen zum Hinzufügen von Speicheranbietern finden Sie unter Erweitern der CertOpenStore-Funktionalität.

Wert Bedeutung
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
Öffnet einen Speicher, der eine Sammlung anderer Stores sein wird. Stores werden der Sammlung mithilfe CertAddStoreToCollection und CertRemoveStoreFromCollectionhinzugefügt oder daraus entfernt. Wenn einer Sammlung ein Speicher hinzugefügt wird, werden alle Zertifikate, CRLs und CTLs in diesem Speicher für Suchvorgänge oder Enumerationen des Sammlungsspeichers verfügbar.

Das hohe Wort dwFlags- ist auf Null festgelegt.

pvPara Wert: Der parameter pvPara muss NULLsein.

CERT_STORE_PROV_FILE
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs, die aus einer angegebenen geöffneten Datei gelesen werden. Dieser Anbieter erwartet, dass die Datei nur einen serialisierten Speicher und weder PKCS #7 signierte Nachrichten noch ein einzelnes codiertes Zertifikat enthält.

Der Dateizeiger muss am Anfang der serialisierten Informationsspeicherinformationen positioniert werden. Nachdem die Daten im serialisierten Speicher in den Zertifikatspeicher geladen wurden, wird der Dateizeiger am Anfang aller Daten positioniert, die den serialisierten Speicherdaten in der Datei folgen können. Wenn CERT_FILE_STORE_COMMIT_ENABLE in dwFlags-festgelegt ist, wird das Dateihandle dupliziert, und der Speicher wird immer als serialisierter Speicher zugesichert. Die Datei wird beim Schließen des Speichers nicht geschlossen.

pvPara Wert: Der parameter pvPara muss einen Zeiger auf das Handle einer Datei enthalten, die mit CreateFile-geöffnet wird.

CERT_STORE_PROV_FILENAME_A
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einer Datei. Der Anbieter öffnet die Datei und versucht zunächst, die Datei als serialisierten Speicher zu lesen, dann als PKCS #7 signierte Nachricht und schließlich als einzelnes codiertes Zertifikat.

Der parameter dwEncodingType muss die Codierungstypen enthalten, die sowohl mit Nachrichten als auch mit Zertifikaten verwendet werden sollen. Wenn die Datei ein X.509- codiertes Zertifikat enthält, schlägt der Öffnenvorgang fehl, und ein Aufruf der GetLastError--Funktion gibt ERROR_ACCESS_DENIEDzurück. Wenn das CERT_FILE_STORE_COMMIT_ENABLE Flag in dwFlagsfestgelegt wird, lautet der dwCreationDisposition-wert, der an CreateFile- übergeben wird:

  • Wenn das CERT_STORE_CREATE_NEW_FLAG Flag festgelegt ist, verwendet CreateFile-CREATE_NEW.
  • Wenn das CERT_STORE_OPEN_EXISTING_FLAG-Flag festgelegt ist, verwendet CreateFile-OPEN_EXISTING.
  • Für alle anderen Einstellungen von dwFlagsverwendet CreateFile-OPEN_ALWAYS.

Wenn dwFlagsCERT_FILE_STORE_COMMIT_ENABLEenthält, wird die Datei abhängig vom geöffneten Dateityp als PKCS #7 oder serialisierter Speicher zugesichert. Wenn die Datei leer war oder der Dateiname entweder die Erweiterung P7c oder SPC hat, wird die Datei als PKCS #7 zugesichert. Andernfalls wird die Datei als serialisierter Speicher zugesichert.

pvPara Wert: Der parameter pvPara muss einen Zeiger auf null-beendete ANSI-Zeichenfolge enthalten, die den Namen einer vorhandenen, ungeöffneten Datei enthält.

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
Identisch mit CERT_STORE_PROV_FILENAME_A.

pvPara Wert: Der parameter pvPara muss einen Zeiger auf eine mit Null beendete Unicode-Zeichenfolge enthalten, die den Namen einer vorhandenen, ungeöffneten Datei enthält.

CERT_STORE_PROV_LDAP(_W)
sz_CERT_STORE_PROV_LDAP(_W)
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus den Ergebnissen einer LDAP-Abfrage.

Zum Ausführen von Schreibvorgängen im Speicher muss die Abfragezeichenfolge eine BASE-Abfrage ohne Filter und ein einzelnes Attribut angeben.

pvPara Wert: Wenn der dwFlags Parameter CERT_LDAP_STORE_OPENED_FLAGenthält, legen Sie pvPara- auf die Adresse einer CERT_LDAP_STORE_OPENED_PARA Struktur fest, die die zu verwendende festgelegte LDAP-Sitzung angibt.

Legen Sie andernfalls pvPara- so fest, dass sie auf eine mit Null beendete Unicode-Zeichenfolge zeigt, die die LDAP-Abfragezeichenfolge enthält. Weitere Informationen zu LDAP-Abfragezeichenfolgen finden Sie unter LDAP-Dialekt-.

CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY
Erstellt einen Zertifikatspeicher im zwischengespeicherten Speicher. Es werden zunächst keine Zertifikate, Zertifikatsperrlisten (CRLs) oder Zertifikatvertrauenslisten (CTLs) in den Speicher geladen. Wird in der Regel zum Erstellen eines temporären Speichers verwendet.

Alle Zertifikate, CRLs oder CTLs oder Änderungen an Eigenschaften von Zertifikaten, CRLs oder CTLs in einem Speicher werden nicht automatisch gespeichert. Sie können in einer Datei oder in einem Speicher BLOB- gespeichert werden, indem sie CertSaveStore-verwenden.

pvPara Wert: Der parameter pvPara wird nicht verwendet.

CERT_STORE_PROV_MSG
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus der angegebenen kryptografischen Nachricht. Der dwEncodingType Parameter muss die Codierungstypen enthalten, die sowohl mit Nachrichten als auch mit Zertifikaten verwendet werden.

pvPara Wert: Der pvPara Parameter enthält ein HCRYPTMSG Handle der codierten Nachricht, das von einem Aufruf von CryptMsgOpenToDecodezurückgegeben wird.

CERT_STORE_PROV_PHYSICAL(_W)
sz_CERT_STORE_PROV_PHYSICAL(_W)
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einem angegebenen physischen Speicher, der Mitglied eines logischen Systemspeichers ist.

Zwei Namen werden durch einen dazwischen liegenden umgekehrten Schrägstrich (\) getrennt, z. B. "Root.Default". Hier ist "Root" der Name des Systemspeichers und ". "Default" ist der Name des physischen Speichers. Die Namen des Systems und des physischen Speichers dürfen keine umgekehrten Schrägstriche enthalten. Das hohe Wort von dwFlags gibt den Systemspeicherort an, normalerweise CERT_SYSTEM_STORE_CURRENT_USER. Weitere Informationen finden Sie unter dwFlags weiter unten in diesem Thema und Systemspeicherorte. Einige physische Speicherstandorte können remote geöffnet werden.

pvPara Wert: Der parameter pvPara verweist auf eine mit Null beendete Unicode-Zeichenfolge, die sowohl den Systemspeichernamen als auch physische Namen enthält.

CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einer codierten PKCS #7 signierten Nachricht. Der parameter dwEncodingType muss die Codierungstypen angeben, die mit Nachrichten und Zertifikaten verwendet werden sollen.

pvPara Wert: Der parameter pvPara verweist auf eine CRYPT_DATA_BLOB Struktur, die die codierte Nachricht darstellt.

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
Initialisiert den Speicher mit dem Inhalt eines PKCS #12 Pakets.

Wenn das PKCS #12-Paket durch ein NULL- oder leeres Kennwort geschützt ist, kann diese Funktion den Speicher öffnen.

Ab Windows 8 und Windows Server 2012 verfügt diese Funktion, wenn das in das PFX-Paket eingebettete Kennwort vor einem Active Directory (AD)-Prinzipal geschützt war und der aktuelle Benutzer als Mitglied dieses Prinzipals die Berechtigung zum Entschlüsseln des Kennworts hat, kann diese Funktion erfolgreich den Speicher öffnen. Weitere Informationen finden Sie im parameter pvPara und im PKCS12_PROTECT_TO_DOMAIN_SIDS Flag der funktion PFXExportCertStoreEx.

Sie können PFX-Kennwörter vor einem AD-Prinzipal schützen, der in Windows 8 und Windows Server 2012 beginnt.

pvPara Wert: Der parameter pvPara verweist auf eine CRYPT_DATA_BLOB Struktur, die das PKCS #12-Paket darstellt.

CERT_STORE_PROV_REG
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einem Registrierungsunterschlüssel.

Dieser Anbieter öffnet oder erstellt die Registrierungsunterschlüssel Zertifikate, CRLsund CTLs unter dem in pvParaübergebenen Schlüssel. Die Eingabetaste wird vom Anbieter nicht geschlossen. Vor der Rückgabe öffnet der Anbieter eine eigene Kopie des Schlüssels, der in pvParaübergeben wurde. Wenn CERT_STORE_READONLY_FLAG im niedrigen Wort dwFlagsfestgelegt ist, werden Registrierungsunterschlüssel mithilfe der RegOpenKey- mit KEY_READ_ACCESS geöffnet. Andernfalls werden Registrierungsunterschlüssel mit RegCreateKey- mit KEY_ALL_ACCESS erstellt. Alle Änderungen am Inhalt des geöffneten Speichers werden sofort in der Registrierung gespeichert. Wenn CERT_STORE_READONLY_FLAG jedoch im niedrigen Wort dwFlagsfestgelegt ist, führt jeder Versuch, dem Inhalt des Speichers hinzuzufügen oder die Eigenschaft eines Kontexts zu ändern, einen Fehler mit GetLastError zurückgeben den E_ACCESSDENIED Code zurück.

pvPara Wert: Der parameter pvPara enthält das Handle eines geöffneten Registrierungsschlüssels.

CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einem Speicherspeicherort, der einen serialisierten Speicher enthält.

pvPara Wert: Der parameter pvPara verweist auf eine CRYPT_DATA_BLOB Struktur, die den serialisierten Speicher-BLOB enthält.

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
Zurzeit nicht verwendet.
CERT_STORE_PROV_SYSTEM_A
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus dem angegebenen Systemspeicher.

Der Systemspeicher ist ein logischer Sammlungsspeicher, der aus einem oder mehreren physischen Speicher besteht. Ein physischer Speicher, der einem Systemspeicher zugeordnet ist, wird mit der funktion CertRegisterPhysicalStore registriert. Nachdem der Systemspeicher geöffnet wurde, werden alle damit verbundenen physischen Speicher auch durch Aufrufe von CertOpenStore- geöffnet und der Systemspeicherauflistung mithilfe der CertAddStoreToCollection-Funktion hinzugefügt. Das hohe Wort von dwFlags gibt den Speicherort des Systems an, in der Regel auf CERT_SYSTEM_STORE_CURRENT_USER festgelegt. Ausführliche Informationen zu Registrierungsspeicherorten finden Sie unter dwFlags weiter unten in diesem Thema und Systemspeicherorte. Einige Systemspeicherorte können remote geöffnet werden; weitere Informationen finden Sie unter Systemspeicherorte.

pvPara Wert: Der parameter pvPara verweist auf eine null-gekündigte ANSI-Zeichenfolge, die einen Systemspeichernamen enthält, z. B. "My" oder "Root".

CERT_STORE_PROV_SYSTEM(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
Identisch mit CERT_STORE_PROV_SYSTEM_A.

pvPara Wert: Der pvPara Parameter verweist auf eine mit Null beendete Unicode-Zeichenfolge, die einen Systemspeichernamen enthält, z. B. "My" oder "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY_A
Initialisiert den Speicher mit Zertifikaten, CRLs und CTLs aus einem physischen Registrierungsspeicher. Der physische Speicher wird nicht als Sammlungsspeicher geöffnet. Enumerationen und Suchvorgänge durchlaufen nur die Zertifikate, CRLs und CTLs in diesem physischen Speicher.

Das hohe Wort von dwFlags gibt den Speicherort des Systems an, in der Regel auf CERT_SYSTEM_STORE_CURRENT_USER festgelegt. Weitere Informationen finden Sie unter dwFlags weiter unten in diesem Thema. Einige Systemspeicherorte können remote geöffnet werden; weitere Informationen finden Sie unter Systemspeicherorte.

pvPara Wert: Der parameter pvPara verweist auf eine null-gekündigte ANSI-Zeichenfolge, die einen Systemspeichernamen enthält, z. B. "My" oder "Root".

CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
Identisch mit CERT_STORE_PROV_SYSTEM_REGISTRY_A.

pvPara Wert: Der pvPara Parameter verweist auf eine mit Null beendete Unicode-Zeichenfolge, die einen Systemspeichernamen enthält, z. B. "My" oder "Root".

[in] dwEncodingType

Gibt den Zertifikatcodierungstyp und Nachrichtencodierungstypan. Die Codierung wird nur verwendet, wenn der parameter dwSaveAs der CertSaveStore--Funktion CERT_STORE_SAVE_AS_PKCS7enthält. Andernfalls wird der dwMsgAndCertEncodingType Parameter nicht verwendet.

Dieser Parameter gilt nur, wenn der CERT_STORE_PROV_MSG-, CERT_STORE_PROV_PKCS7- oder CERT_STORE_PROV_FILENAME Anbietertyp im parameter lpszStoreProvider angegeben wird. Für alle anderen Anbietertypen ist dieser Parameter nicht verwendet und sollte auf Null festgelegt werden.

Dieser Parameter kann eine Kombination aus einem oder mehreren der folgenden Werte sein.

Wert Bedeutung
PKCS_7_ASN_ENCODING
65536 (0x10000)
Gibt die PKCS #7-Nachrichtencodierung an.
X509_ASN_ENCODING
1 (0x1)
Gibt die X.509-Zertifikatcodierung an.

[in] hCryptProv

Dieser Parameter wird nicht verwendet und sollte auf NULL-festgelegt werden.

Windows Server 2003 und Windows XP: Ein Handle für einen Kryptografieanbieter. Durch das Übergeben NULL- für diesen Parameter wird ein geeigneter Standardanbieter verwendet. Die Verwendung des Standardanbieters wird empfohlen. Der standard- oder angegebene kryptografische Anbieter wird für alle Speicherfunktionen verwendet, die die Signatur eines Antragstellerzertifikats oder einer CRL überprüfen. Der Datentyp dieses Parameters ist HCRYPTPROV.

[in] dwFlags

Diese Werte bestehen aus Werten mit hohem Wort- und Low-Word-Wert, die mit einem bitweisenODER--Vorgang kombiniert werden.

Der wortarme Teil von dwFlags steuert eine Vielzahl allgemeiner Merkmale des geöffneten Zertifikat speichers. Dieser Teil kann mit allen Store-Anbietertypen verwendet werden. Der Wortbereich dwFlags kann einer der folgenden Werte entsprechen.

Wert Bedeutung
CERT_STORE_BACKUP_RESTORE_FLAG
Verwenden Sie die SE_BACKUP_NAME des Threads und SE_RESTORE_NAME Berechtigungen, um Registrierungs- oder dateibasierte Systemspeicher zu öffnen. Wenn der Thread nicht über diese Berechtigungen verfügt, muss diese Funktion mit einem Fehler "Zugriff verweigert" fehlschlagen.
CERT_STORE_CREATE_NEW_FLAG
Wenn kein speicher vorhanden ist, wird ein neuer Speicher erstellt. Die Funktion schlägt fehl, wenn der Speicher bereits vorhanden ist.

Wenn weder CERT_STORE_OPEN_EXISTING_FLAG noch CERT_STORE_CREATE_NEW_FLAG festgelegt ist, wird ein Speicher geöffnet, wenn er vorhanden ist oder erstellt und geöffnet wird, wenn er noch nicht vorhanden ist.

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
Das Schließen des Anbieters des Stores zurückstellen, bis alle Zertifikate, CRLs oder CTLs aus dem Store nicht mehr verwendet werden. Der Speicher wird tatsächlich geschlossen, wenn das letzte Zertifikat, die CRL oder CTL aus dem Speicher freigegeben wird. Alle An eigenschaften dieser Zertifikate, CRLs und CTLs vorgenommenen Änderungen werden auch nach dem Aufruf von CertCloseStorebeibehalten.

Wenn dieses Kennzeichen nicht festgelegt ist und Zertifikate, CRLs oder CTLs aus dem Speicher weiterhin verwendet werden, werden alle Änderungen an den Eigenschaften dieser Zertifikate, CRLs und CTLs nicht beibehalten.

Wenn diese Funktion mit CERT_CLOSE_STORE_FORCE_FLAGaufgerufen wird, wird CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG ignoriert.

Wenn dieses Flag festgelegt ist und ein nicht-NULL-hCryptProv Parameterwert übergeben wird, wird dieser Anbieter auch nach dem Aufruf dieser Funktion weiterhin verwendet.

CERT_STORE_DELETE_FLAG
Der Speicher wird gelöscht, anstatt geöffnet zu werden. Diese Funktion gibt NULL- für Erfolg und Fehler des Löschvorgangs zurück. Um den Erfolg des Löschvorgangs zu ermitteln, rufen Sie GetLastErrorauf, der null zurückgibt, wenn der Speicher gelöscht wurde, und einen Wert ungleich Null, wenn er nicht gelöscht wurde.
CERT_STORE_ENUM_ARCHIVED_FLAG
Normalerweise ignoriert eine Aufzählung aller Zertifikate im Speicher jedes Zertifikats mit dem CERT_ARCHIVED_PROP_ID-Eigenschaftensatz. Wenn dieses Kennzeichen festgelegt ist, enthält eine Aufzählung der Zertifikate im Speicher alle Zertifikate im Speicher, einschließlich der Zertifikate, die über die eigenschaft CERT_ARCHIVED_PROP_ID verfügen.
CERT_STORE_MAXIMUM_ALLOWED_FLAG
Öffnen Sie den Speicher mit den maximal zulässigen Berechtigungen. Wenn dieses Flag angegeben ist, werden Registrierungsspeicher zuerst mit Schreibzugriff geöffnet und wenn dies fehlschlägt, werden sie mit schreibgeschütztem Zugriff erneut geöffnet.
CERT_STORE_NO_CRYPT_RELEASE_FLAG
Dieses Flag wird nicht verwendet, wenn der hCryptProv Parameter NULL-ist. Dieses Flag ist nur gültig, wenn ein nichtNULL- CSP-Handle als hCryptProv-Parameter übergeben wird. Durch Festlegen dieses Flags wird die automatische Freigabe eines nicht standardmäßigen CSP verhindert, wenn der Zertifikatspeicher geschlossen wird.
CERT_STORE_OPEN_EXISTING_FLAG
Öffnen Sie nur einen vorhandenen Speicher. Wenn der Speicher nicht vorhanden ist, schlägt die Funktion fehl.
CERT_STORE_READONLY_FLAG
Öffnen Sie den Speicher im schreibgeschützten Modus. Jeder Versuch, den Inhalt des Speichers zu ändern, führt zu einem Fehler. Wenn dieses Kennzeichen festgelegt und ein registrierungsbasierter Speicheranbieter verwendet wird, werden die Registrierungsunterschlüssel mithilfe RegOpenKey- mit KEY_READ_ACCESSgeöffnet. Andernfalls werden die Registrierungsunterschlüssel mithilfe RegCreateKey- mit KEY_ALL_ACCESSerstellt.
CERT_STORE_SET_LOCALIZED_NAME_FLAG
Wenn dieses Flag unterstützt wird, legt der Anbieter die CERT_STORE_LOCALIZED_NAME_PROP_ID Eigenschaft des Speichers fest. Der lokalisierte Name kann abgerufen werden, indem die CertGetStoreProperty--Funktion aufgerufen wird, wobei dwPropID- auf CERT_STORE_LOCALIZED_NAME_PROP_IDfestgelegt ist. Dieses Flag wird für Anbieter von Typen CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYund CERT_STORE_PROV_PHYSICAL_Wunterstützt.
CERT_STORE_SHARE_CONTEXT_FLAG
Wenn Sie einen Speicher mehrmals öffnen, können Sie dieses Kennzeichen festlegen, um eine effiziente Speicherauslastung sicherzustellen, indem Sie den Speicher für die codierten Teile eines Zertifikats, einer CRL oder eines CTL-Kontexts in den geöffneten Instanzen der Speicher wiederverwenden.
CERT_STORE_UPDATE_KEYID_FLAG
Listen von Schlüsselbezeichnern sind in CurrentUser und LocalMachine vorhanden. Diese Schlüsselbezeichner weisen Eigenschaften ähnlich wie die Eigenschaften von Zertifikaten auf. Wenn die CERT_STORE_UPDATE_KEYID_FLAG festgelegt ist, wird diese Eigenschaft für jeden Schlüsselbezeichner am Speicherort, der über eine CERT_KEY_PROV_INFO_PROP_ID Eigenschaft verfügt, automatisch von der Schlüsselbezeichnereigenschaft CERT_KEY_PROV_INFO_PROP_ID oder der CERT_KEY_IDENTIFIER_PROP_ID des Zertifikats im Zusammenhang mit diesem Schlüsselbezeichner aktualisiert.
 

Die CERT_STORE_PROV_SYSTEM-, CERT_STORE_PROV_SYSTEM_REGISTRY- und CERT_STORE_PROV_PHYSICAL Anbietertypen verwenden die folgenden hohen Wörter von dwFlags- zum Angeben von Systemspeicherregistrierungsspeicherorten:

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

Standardmäßig wird ein Systemspeicherort relativ zum HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEoder HKEY_USERS vordefinierten Registrierungsschlüssels geöffnet. Weitere Informationen finden Sie unter Systemspeicherorte.

Die folgenden High-Word-Flags setzen dieses Standardverhalten außer Kraft.

Wert Bedeutung
CERT_SYSTEM_STORE_RELOCATE_FLAG
Wenn festgelegt, muss pvPara- einen Zeiger auf eine CERT_SYSTEM_STORE_RELOCATE_PARA Struktur anstelle einer Zeichenfolge enthalten. Die Struktur gibt sowohl den Namen des Speichers als auch den Speicherort in der Registrierung an.
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
Wenn der CurrentUser -Stammspeicher geöffnet wird, werden standardmäßig alle SystemRegistry-Wurzeln, die nicht in der geschützten Stammliste enthalten sind, aus dem Cache gelöscht, bevor diese Funktion zurückgegeben wird. Wenn dieses Kennzeichen festgelegt ist, wird dieser Standardwert außer Kraft gesetzt, und alle Wurzeln in systemRegistry werden zurückgegeben, und es wird keine Überprüfung der geschützten Stammliste durchgeführt.
 

Der CERT_STORE_PROV_REGISTRY-Anbieter verwendet die folgenden High-Word-Flags.

Wert Bedeutung
CERT_REGISTRY_STORE_REMOTE_FLAG
pvPara enthält ein Handle zu einem Registrierungsschlüssel auf einem Remotecomputer. Um auf einen Registrierungsschlüssel auf einem Remotecomputer zuzugreifen, müssen Sicherheitsberechtigungen auf dem Remotecomputer festgelegt werden, um den Zugriff zuzulassen. Weitere Informationen finden Sie in den Hinweisen.
CERT_REGISTRY_STORE_SERIALIZED_FLAG
Der CERT_STORE_PROV_REG Anbieter speichert Zertifikate, CRLs und CTLs in einem einzelnen serialisierten Speicherunterschlüssel, anstatt den Standardspeichervorgang auszuführen. Der Standardwert ist, dass jedes Zertifikat, jede CRL oder jede CTL unter dem entsprechenden Unterschlüssel als separater Registrierungsunterschlüssel gespeichert wird.

Dieses Flag wird hauptsächlich für Stores verwendet, die aus der Gruppenrichtlinienvorlage (Group Policy Template, GPT) heruntergeladen wurden, z. B. die CurrentUserGroupPolicy- und LocalMachineGroupPolicy-Speicher.

Wenn CERT_REGISTRY_STORE_SERIALIZED_FLAG festgelegt ist, werden Ergänzungen, Löschungen oder Eigenschaftsänderungen erst beibehalten, wenn ein Aufruf von CertCloseStore oder CertControlStore- mithilfe von CERT_STORE_CTRL_COMMITerfolgt.

 

Die CERT_STORE_PROV_FILE- und CERT_STORE_PROV_FILENAME Anbietertypen verwenden die folgenden High-Word-Flags.

Wert Bedeutung
CERT_FILE_STORE_COMMIT_ENABLE
Durch Festlegen dieses Flags werden alle Ergänzungen zum Speicher oder änderungen an Eigenschaften von Kontexten im Speicher an den Dateispeicher entweder beim Aufrufen CertCloseStore- oder wenn CertControlStore- mit CERT_STORE_CONTROL_COMMITaufgerufen wird.

CertOpenStore schlägt mit E_INVALIDARG fehl, wenn sowohl CERT_FILE_STORE_COMMIT_ENABLE als auch CERT_STORE_READONLY_FLAG in dwFlags-festgelegt sind.

 

Der anbietertyp CERT_STORE_PROV_LDAP verwendet die folgenden High-Word-Flags.

Wert Bedeutung
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
Führt eine A-Record-only DNS-Suche für die URL aus, die im pvPara--Parameter benannt ist. Dadurch wird verhindert, dass falsche DNS-Abfragen beim Auflösen von URL-Hostnamen generiert werden. Verwenden Sie dieses Flag beim Übergeben eines Hostnamens im Gegensatz zu einem Domänennamen für den pvPara--Parameter.
CERT_LDAP_STORE_OPENED_FLAG
Verwenden Sie dieses Kennzeichen, um eine vorhandene LDAP-Sitzung zu verwenden. Wenn dieses Flag angegeben wird, ist der pvPara Parameter die Adresse einer CERT_LDAP_STORE_OPENED_PARA Struktur, die Informationen zur zu verwendenden LDAP-Sitzung enthält.
CERT_LDAP_STORE_SIGN_FLAG
Um für einige Anwendungen erforderliche Integrität bereitzustellen, signieren Sie den gesamten LDAP-Datenverkehr mithilfe des Kerberos-Authentifizierungsprotokolls digital an und von einem LDAP-Server.
CERT_LDAP_STORE_UNBIND_FLAG
Verwenden Sie dieses Kennzeichen mit dem flag CERT_LDAP_STORE_OPENED_FLAG, damit die LDAP-Sitzung beim Schließen des Speichers ungebunden ist. Das System entbindet die LDAP-Sitzung mithilfe der ldap_unbind-Funktion, wenn der Speicher geschlossen wird.

[in] pvPara

Ein 32-Bit-Wert, der zusätzliche Informationen für diese Funktion enthalten kann. Der Inhalt dieses Parameters hängt vom Wert des lpszStoreProvider und anderen Parametern ab.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion ein Handle an den Zertifikatspeicherzurück. Wenn Sie den Speicher abgeschlossen haben, lassen Sie das Handle los, indem Sie die CertCloseStore--Funktion aufrufen.

Wenn die Funktion fehlschlägt, wird NULL-zurückgegeben. Rufen Sie für erweiterte Fehlerinformationen GetLastError-auf.

HinweisCreateFile-, ReadFile-oder Registrierungsfehler können weitergegeben werden und deren Fehlercodes zurückgegeben werden. CertOpenStore- einen einzelnen Fehlercode besitzt, den ERROR_FILE_NOT_FOUND Code, der angibt, dass die Funktion den vom lpszStoreProvider Parameter angegebenen Anbieter nicht finden konnte.
 

Bemerkungen

Ein Systemspeicher ist eine Sammlung, die aus mindestens einem physischen gleichgeordneten Speicher besteht. Für jeden Systemspeicher gibt es vordefinierte physische gleichgeordnete Speicher. Nach dem Öffnen eines Systemspeichers wie "My" bei CERT_SYSTEM_STORE_CURRENT_USER wird CertOpenStore- aufgerufen, um alle physischen Speicher in der Systemspeichersammlung zu öffnen. Jeder dieser physischen Speicher wird der Systemspeicherauflistung mithilfe der funktion CertAddStoreToCollection hinzugefügt. Alle Zertifikate, CRLs und CTLs in diesen physischen Speicher sind über die logische Systemspeichersammlung verfügbar.

Hinweis Die Reihenfolge des Zertifikatkontexts bleibt möglicherweise nicht im Speicher erhalten. Um auf ein bestimmtes Zertifikat zuzugreifen, müssen Sie die Zertifikate im Speicher durchlaufen.
 

Die folgenden Systemspeicherorte können remote geöffnet werden:

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

Systemspeicherorte werden remote geöffnet, indem der Speichername in der Zeichenfolge vorangestellt wird, die an pvPara- mit dem Computernamen übergeben wird. Beispiele für Namen von Remotesystemspeichern sind:

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

Weitere Informationen zu Systemspeichern finden Sie unter Systemspeicherorte.

Weitere Informationen zu den stores, die automatisch migriert werden, finden Sie unter Zertifikatspeichermigration.

Beispiele

Das folgende Beispiel zeigt das Öffnen mehrerer Zertifikatspeicher verschiedener Speicheranbietertypen. Im Beispiel wird die CreateMyDACL--Funktion verwendet, die im Thema Erstellen einer DACL- definiert ist, um sicherzustellen, dass die geöffnete Datei mit einer ordnungsgemäßen DACL erstellt wird. Weitere Beispiele für das Öffnen anderer Speicheranbietertypen finden Sie unter Beispiel C-Code zum Öffnen von Zertifikatspeichern.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- wincrypt.h
Library Crypt32.lib
DLL- Crypt32.dll

Siehe auch

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore-

CertSaveStore-

von Zertifikatspeicherfunktionen