Fonction CertOpenStore (wincrypt.h)
La fonction CertOpenStore ouvre un magasin de certificats à l’aide d’un type de fournisseur de magasin spécifié. Bien que cette fonction puisse ouvrir un magasin de certificats à la plupart des fins, CertOpenSystemStore est recommandé d’ouvrir les magasins de certificats les plus courants. CertOpenStore est nécessaire pour des options plus complexes et des cas spéciaux.
Syntaxe
HCERTSTORE CertOpenStore(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara
);
Paramètres
[in] lpszStoreProvider
Pointeur vers une chaîne ANSI terminée par null qui contient le type de fournisseur de magasin.
Les valeurs suivantes représentent les types de magasin prédéfinis. Le type de fournisseur de magasin détermine le contenu du paramètre pvPara et l’utilisation et la signification du mot élevé du paramètre dwFlags. Des fournisseurs de magasin supplémentaires peuvent être installés ou inscrits à l’aide de la fonction CryptInstallOIDFunctionAddress ou CryptRegisterOIDFunction. Pour plus d’informations sur l’ajout de fournisseurs de magasin, consultez Extension de la fonctionnalité CertOpenStore.
Valeur | Signification |
---|---|
|
Ouvre un magasin qui sera une collection d’autres magasins. Les magasins sont ajoutés ou supprimés de la collection à l’aide de CertAddStoreToCollection et CertRemoveStoreFromCollection. Lorsqu’un magasin est ajouté à une collection, tous les certificats, listes de révocation de certificats et listes CTL de ce magasin deviennent disponibles pour les recherches ou les énumérations du magasin de collections.
Le mot élevé de dwFlags est défini sur zéro. valeur pvPara : le paramètre pvPara doit être NULL. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL lues à partir d’un fichier ouvert spécifié. Ce fournisseur s’attend à ce que le fichier contienne uniquement un magasin sérialisé et non pas des messages signés PKCS #7 ou un certificat encodé unique.
Le pointeur de fichier doit être positionné au début des informations de magasin sérialisées. Une fois que les données du magasin sérialisé ont été chargées dans le magasin de certificats, le pointeur de fichier est positionné au début de toutes les données qui peuvent suivre les données du magasin sérialisé dans le fichier. Si CERT_FILE_STORE_COMMIT_ENABLE est défini dans dwFlags, le handle de fichier est dupliqué et le magasin est toujours validé en tant que magasin sérialisé. Le fichier n’est pas fermé lorsque le magasin est fermé. valeur pvPara : le paramètre pvPara doit contenir un pointeur vers le handle d’un fichier ouvert à l’aide de CreateFile. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes de révocation de certificats à partir d’un fichier. Le fournisseur ouvre le fichier et tente d’abord de lire le fichier en tant que magasin sérialisé, puis en tant que message signé PKCS #7, puis en tant que certificat encodé unique.
Le paramètre dwEncodingType doit contenir les types d’encodage à utiliser avec les messages et les certificats. Si le fichier contient un certificat X.509 encodé, l’opération d’ouverture échoue et un appel à la fonction GetLastError retourne ERROR_ACCESS_DENIED. Si l’indicateur CERT_FILE_STORE_COMMIT_ENABLE est défini dans dwFlags, la valeur dwCreationDisposition passée à CreateFile est la suivante :
Si dwFlags inclut CERT_FILE_STORE_COMMIT_ENABLE, le fichier est validé en tant que magasin PKCS #7 ou sérialisé en fonction du type de fichier ouvert. Si le fichier a été vide ou si le nom de fichier a une extension .p7c ou .spc, le fichier est validé en tant que PKCS #7. Sinon, le fichier est validé en tant que magasin sérialisé. valeur pvPara : le paramètre pvPara doit contenir un pointeur vers une chaîne ANSI terminée par null qui contient le nom d’un fichier existant, non ouvert. |
|
Identique à CERT_STORE_PROV_FILENAME_A.
valeur pvPara : le paramètre pvPara doit contenir un pointeur vers une chaîne Unicode terminée par null qui contient le nom d’un fichier existant, non ouvert. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir des résultats d’une requête LDAP.
Pour effectuer des opérations d’écriture sur le magasin, la chaîne de requête doit spécifier une requête BASE sans filtre et un seul attribut. valeur pvPara : Si le paramètre dwFlags contient CERT_LDAP_STORE_OPENED_FLAG, définissez pvPara à l’adresse d’une structure de CERT_LDAP_STORE_OPENED_PARA qui spécifie la session LDAP établie à utiliser. Sinon, définissez pvPara pour pointer vers une chaîne Unicode terminée par null qui contient la chaîne de requête LDAP. Pour plus d’informations sur les chaînes de requête LDAP, consultez dialecte LDAP. |
|
Crée un magasin de certificats en mémoire mise en cache. Aucun certificat, listes de révocation de certificats (CRL) ou listes d’approbation de certificats (CTL) sont initialement chargées dans le magasin. Généralement utilisé pour créer un magasin temporaire.
Tout ajout de certificats, de listes de révocation de certificats ou de listes de révocation de certificats, de listes de révocation de certificats ou de listes de révocation de certificats dans un magasin de mémoire n’est pas automatiquement enregistré. Ils peuvent être enregistrés dans un fichier ou dans une mémoire blob à l’aide de CertSaveStore. valeur pvPara : le paramètre pvPara n’est pas utilisé. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir du message de chiffrement spécifié. Le paramètre dwEncodingType doit contenir les types d’encodage utilisés avec les messages et les certificats.
valeur pvPara : le paramètre pvPara contient un handle HCRYPTMSG du message encodé, retourné par un appel à CryptMsgOpenToDecode. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir d’un magasin physique spécifié qui est membre d’un magasin de système logique.
Deux noms sont séparés par une barre oblique inverse intermédiaire (\), par exemple « Root.Default ». Ici, « Root » est le nom du magasin système et ». Default » est le nom du magasin physique. Les noms du système et du magasin physique ne peuvent pas contenir de barres obliques inverses. Le mot élevé de dwFlags indique l’emplacement du magasin système, généralement CERT_SYSTEM_STORE_CURRENT_USER. Pour plus d’informations, consultez dwFlags plus loin dans cette rubrique et consultez Emplacements du magasin système. Certains emplacements de magasin physique peuvent être ouverts à distance. valeur pvPara : le paramètre pvPara pointe vers une chaîne Unicode terminée par null qui contient le nom du magasin système et les noms physiques. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir d’un message signé PKCS #7 encodé. Le paramètre dwEncodingType doit spécifier les types d’encodage à utiliser avec les messages et les certificats.
valeur pvPara : le paramètre pvPara pointe vers une structure CRYPT_DATA_BLOB qui représente le message encodé. |
|
Initialise le magasin avec le contenu d’un paquet PKCS #12.
Si le paquet PKCS #12 est protégé par un mot de passe NULL ou vide, cette fonction réussit à ouvrir le magasin. À compter de Windows 8 et Windows Server 2012, si le mot de passe incorporé dans le paquet PFX a été protégé par un principal Active Directory (AD) et que l’utilisateur actuel, en tant que membre de ce principal, a l’autorisation de déchiffrer le mot de passe, cette fonction réussit à ouvrir le magasin. Pour plus d’informations, consultez le paramètre pvPara et l’indicateur PKCS12_PROTECT_TO_DOMAIN_SIDS de la fonction PFXExportCertStoreEx. Vous pouvez protéger les mots de passe PFX vers un principal AD à partir de Windows 8 et Windows Server 2012. valeur pvPara : le paramètre pvPara pointe vers une structure CRYPT_DATA_BLOB qui représente le paquet PKCS #12. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir d’une sous-clé de Registre.
Ce fournisseur ouvre ou crée les sous-clés de Registre Certificates, CRLset CTLs sous la clé passée dans pvPara. La clé d’entrée n’est pas fermée par le fournisseur. Avant de retourner, le fournisseur ouvre sa propre copie de la clé passée dans pvPara. Si CERT_STORE_READONLY_FLAG est défini dans le mot faible de valeur pvPara : le paramètre pvPara contient le handle d’une clé de Registre ouverte. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir d’un emplacement de mémoire qui contient un magasin sérialisé.
valeur pvPara : le paramètre pvPara pointe vers une structure CRYPT_DATA_BLOB qui contient l’objet BLOB de mémoire sérialisée. |
|
Non utilisé actuellement. |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes CTL à partir du magasin système spécifié.
Le magasin système est un magasin de collections logique qui se compose d’un ou plusieurs magasins physiques. Un magasin physique associé à un magasin système est inscrit auprès de la fonction CertRegisterPhysicalStore valeur pvPara : le paramètre pvPara pointe vers une chaîne ANSI terminée par null qui contient un nom de magasin système, tel que « My » ou « Root ». |
|
Identique à CERT_STORE_PROV_SYSTEM_A.
valeur pvPara : le paramètre pvPara pointe vers une chaîne Unicode terminée par null qui contient un nom de magasin système, tel que « My » ou « Root ». |
|
Initialise le magasin avec des certificats, des listes de révocation de certificats et des listes de révocation de certificats à partir d’un magasin de registre physique. Le magasin physique n’est pas ouvert en tant que magasin de collection. Les énumérations et les recherches passent uniquement par les certificats, les listes de révocation de certificats et les listes CTL dans ce magasin physique.
Le mot élevé de dwFlags indique l’emplacement du magasin système, généralement défini sur CERT_SYSTEM_STORE_CURRENT_USER. Pour plus d’informations, consultez dwFlags plus loin dans cette rubrique. Certains emplacements du magasin système peuvent être ouverts à distance ; pour plus d’informations, consultez emplacements du magasin système. valeur pvPara : le paramètre pvPara pointe vers une chaîne ANSI terminée par null qui contient un nom de magasin système, tel que « My » ou « Root ». |
|
Identique à CERT_STORE_PROV_SYSTEM_REGISTRY_A.
valeur pvPara : le paramètre pvPara pointe vers une chaîne Unicode terminée par null qui contient un nom de magasin système, tel que « My » ou « Root ». |
[in] dwEncodingType
Spécifie le type d’encodage de certificat et type d’encodage de message. L’encodage est utilisé uniquement lorsque le paramètre
Ce paramètre s’applique uniquement lorsque le type de fournisseur CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7ou CERT_STORE_PROV_FILENAME est spécifié dans le paramètre lpszStoreProvider. Pour tous les autres types de fournisseurs, ce paramètre n’est pas utilisé et doit être défini sur zéro.
Ce paramètre peut être une combinaison d’une ou plusieurs des valeurs suivantes.
Valeur | Signification |
---|---|
|
Spécifie l’encodage de message PKCS #7. |
|
Spécifie l’encodage de certificat X.509. |
[in] hCryptProv
Ce paramètre n’est pas utilisé et doit être défini sur NULL.
Windows Server 2003 et Windows XP : un handle A à un fournisseur de chiffrement. Le passage NULL pour ce paramètre entraîne l’utilisation d’un fournisseur par défaut approprié. L’utilisation du fournisseur par défaut est recommandée. Le fournisseur de chiffrement par défaut ou spécifié est utilisé pour toutes les fonctions de magasin qui vérifient la signature d’un certificat ou d’une liste de révocation de certificats d’objet. Le type de données de ce paramètre est HCRYPTPROV.
[in] dwFlags
Ces valeurs se composent de valeurs de mots élevés et de mots faibles combinés à l’aide d’une opération deOU au niveau du bit.
La partie basse de dwFlags contrôle diverses caractéristiques générales du magasin de certificats ouvert. Cette partie peut être utilisée avec tous les types de fournisseurs de magasin. La partie basse de dwFlags peut être l’une des valeurs suivantes.
Valeur | Signification |
---|---|
|
Utilisez les privilèges SE_BACKUP_NAME et SE_RESTORE_NAME du thread pour ouvrir des magasins système basés sur le Registre ou les fichiers. Si le thread ne dispose pas de ces privilèges, cette fonction doit échouer avec une erreur d’accès refusée. |
|
Un nouveau magasin est créé s’il n’en existe pas. La fonction échoue si le magasin existe déjà.
Si aucun CERT_STORE_OPEN_EXISTING_FLAG ni CERT_STORE_CREATE_NEW_FLAG n’est défini, un magasin est ouvert s’il existe ou est créé et ouvert s’il n’existe pas déjà. |
|
Différer la fermeture du fournisseur du magasin jusqu’à ce que tous les certificats, listes de révocation de certificats ou listes CTL obtenues à partir du magasin ne soient plus utilisés. Le magasin est en fait fermé lorsque le dernier certificat, la liste de révocation de certificats ou la durée de vie obtenue à partir du magasin est libéré. Toutes les modifications apportées aux propriétés de ces certificats, CRL et CTL, même après l’appel à CertCloseStore, sont conservées.
Si cet indicateur n’est pas défini et que les certificats, les listes de révocation de certificats ou les listes CTL obtenues à partir du magasin sont toujours en cours d’utilisation, les modifications apportées aux propriétés de ces certificats, CRL et CTL ne sont pas conservées. Si cette fonction est appelée avec CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG est ignorée. Lorsque cet indicateur est défini et qu’une valeur de paramètre |
|
Le magasin est supprimé au lieu d’être ouvert. Cette fonction retourne NULL pour la réussite et l’échec de la suppression. Pour déterminer la réussite de la suppression, appelez GetLastError, qui retourne zéro si le magasin a été supprimé et une valeur différente de zéro si elle n’a pas été supprimée. |
|
Normalement, une énumération de tous les certificats dans le magasin ignore n’importe quel certificat avec le jeu de propriétés CERT_ARCHIVED_PROP_ID. Si cet indicateur est défini, une énumération des certificats dans le magasin contient tous les certificats du magasin, y compris ceux qui ont la propriété CERT_ARCHIVED_PROP_ID. |
|
Ouvrez le magasin avec le jeu maximal d’autorisations autorisées. Si cet indicateur est spécifié, les magasins de Registre sont d’abord ouverts avec un accès en écriture et, en cas d’échec, ils sont rouverts avec un accès en lecture seule. |
|
Cet indicateur n’est pas utilisé lorsque le paramètre |
|
Ouvrez uniquement un magasin existant. Si le magasin n’existe pas, la fonction échoue. |
|
Ouvrez le magasin en mode lecture seule. Toute tentative de modification du contenu du magasin entraîne une erreur. Lorsque cet indicateur est défini et qu’un fournisseur de magasin basé sur le Registre est utilisé, les sous-clés de Registre sont ouvertes à l’aide de RegOpenKey avec KEY_READ_ACCESS. Sinon, les sous-clés de Registre sont créées à l’aide de RegCreateKey avec KEY_ALL_ACCESS. |
|
Si cet indicateur est pris en charge, le fournisseur définit la propriété CERT_STORE_LOCALIZED_NAME_PROP_ID du magasin. Le nom localisé peut être récupéré en appelant la fonction CertGetStoreProperty |
|
Lors de l’ouverture d’un magasin plusieurs fois, vous pouvez définir cet indicateur pour garantir une utilisation efficace de la mémoire en réutilisant la mémoire pour les parties codées d’un certificat, d’une liste de révocation de certificats ou d’un contexte de durée de vie dans les instances ouvertes des magasins. |
|
Les listes d’identificateurs de clé existent dans CurrentUser et LocalMachine. Ces identificateurs de clé ont des propriétés comme les propriétés des certificats. Si le CERT_STORE_UPDATE_KEYID_FLAG est défini, pour chaque identificateur de clé à l’emplacement du magasin qui a une propriété CERT_KEY_PROV_INFO_PROP_ID, cette propriété est automatiquement mise à jour à partir de la propriété d’identificateur de clé CERT_KEY_PROV_INFO_PROP_ID ou de l'CERT_KEY_IDENTIFIER_PROP_ID du certificat associé à cet identificateur de clé. |
Les types de fournisseurs CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYet CERT_STORE_PROV_PHYSICAL utilisent les mots élevés suivants de dwFlags pour spécifier les emplacements du registre du magasin système :
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
Par défaut, un emplacement de magasin système est ouvert par rapport au HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEou HKEY_USERS clé de Registre prédéfinie. Pour plus d’informations, consultez Emplacements du magasin système.
Les indicateurs de mots élevés suivants remplacent ce comportement par défaut.
Valeur | Signification |
---|---|
|
Quand elle est définie, pvPara doit contenir un pointeur vers une structure CERT_SYSTEM_STORE_RELOCATE_PARA plutôt qu’une chaîne. La structure indique à la fois le nom du magasin et son emplacement dans le Registre. |
|
Par défaut, lorsque le magasin CurrentUser « Racine » est ouvert, toutes les racines SystemRegistry qui ne figurent pas dans la liste racine protégée sont supprimées du cache avant que cette fonction ne retourne. Lorsque cet indicateur est défini, cette valeur par défaut est remplacée et toutes les racines de SystemRegistry sont retournées et aucune vérification de la liste racine protégée n’est effectuée. |
Le fournisseur CERT_STORE_PROV_REGISTRY utilise les indicateurs de mots élevés suivants.
Valeur | Signification |
---|---|
|
pvPara contient un handle vers une clé de Registre sur un ordinateur distant. Pour accéder à une clé de Registre sur un ordinateur distant, les autorisations de sécurité sur l’ordinateur distant doivent être définies pour autoriser l’accès. Pour plus d’informations, consultez Remarques. |
|
Le fournisseur CERT_STORE_PROV_REG enregistre des certificats, des listes de révocation de certificats et des listes de contrôle de contrôle de stockage dans une seule sous-clé de magasin sérialisée au lieu d’effectuer l’opération d’enregistrement par défaut. La valeur par défaut est que chaque certificat, liste de révocation de certificats ou durée de vie est enregistré en tant que sous-clé de Registre distincte sous la sous-clé appropriée.
Cet indicateur est principalement utilisé pour les magasins téléchargés à partir du modèle de stratégie de groupe (GPT), comme les magasins CurrentUserGroupPolicy et LocalMachineGroupPolicy. Lorsque CERT_REGISTRY_STORE_SERIALIZED_FLAG est défini, les ajouts de magasin, les suppressions ou les modifications de propriété ne sont pas conservés tant qu’il n’y a pas d’appel à CertCloseStore ou CertControlStore à l’aide de CERT_STORE_CTRL_COMMIT. |
Les types de fournisseurs CERT_STORE_PROV_FILE et CERT_STORE_PROV_FILENAME utilisent les indicateurs de mots élevés suivants.
Valeur | Signification |
---|---|
|
La définition de cet indicateur valide les ajouts au magasin ou toute modification apportée aux propriétés des contextes du magasin dans le magasin de fichiers lorsque CertCloseStore est appelé ou lorsque CertControlStore est appelé avec CERT_STORE_CONTROL_COMMIT.
CertOpenStore échoue avec E_INVALIDARG si les CERT_FILE_STORE_COMMIT_ENABLE et les CERT_STORE_READONLY_FLAG sont définis dans dwFlags. |
Le type de fournisseur CERT_STORE_PROV_LDAP utilise les indicateurs de mots élevés suivants.
Valeur | Signification |
---|---|
|
Effectue une recherche DNS A-Record uniquement sur l’URL nommée dans le paramètre pvPara. Cela empêche la génération de requêtes DNS fausses lors de la résolution des noms d’hôte d’URL. Utilisez cet indicateur lors du passage d’un nom d’hôte par opposition à un nom de domaine pour le paramètre pvPara. |
|
Utilisez cet indicateur pour utiliser une session LDAP existante. Lorsque cet indicateur est spécifié, le paramètre pvPara est l’adresse d’une structure CERT_LDAP_STORE_OPENED_PARA qui contient des informations sur la session LDAP à utiliser. |
|
Pour fournir l’intégrité requise par certaines applications, signez numériquement tout le trafic LDAP vers et depuis un serveur LDAP à l’aide du protocole d’authentification Kerberos. |
|
Utilisez cet indicateur avec l’indicateur CERT_LDAP_STORE_OPENED_FLAG pour que la session LDAP soit indépendante lorsque le magasin est fermé. Le système annule la liaison de la session LDAP à l’aide de la fonction ldap_unbind lorsque le magasin est fermé. |
[in] pvPara
Valeur 32 bits qui peut contenir des informations supplémentaires pour cette fonction. Le contenu de ce paramètre dépend de la valeur du lpszStoreProvider et d’autres paramètres.
Valeur de retour
Si la fonction réussit, la fonction retourne un handle au magasin de certificats . Une fois que vous avez terminé d’utiliser le magasin, relâchez le handle en appelant la fonction CertCloseStore
Si la fonction échoue, elle retourne NULL . Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Remarques
Un magasin système est une collection qui se compose d’un ou plusieurs magasins frères physiques. Pour chaque magasin système, il existe des magasins frères physiques prédéfinis. Après avoir ouvert un magasin système tel que « My » à CERT_SYSTEM_STORE_CURRENT_USER, CertOpenStore est appelé pour ouvrir tous les magasins physiques dans la collection de magasins système. Chacun de ces magasins physiques est ajouté à la collection de magasins système à l’aide de la fonction CertAddStoreToCollection
Les emplacements de magasin système suivants peuvent être ouverts à distance :
- CERT_SYSTEM_STORE_LOCAL_MACHINE
- CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
- CERT_SYSTEM_STORE_SERVICES
- CERT_SYSTEM_STORE_USERS
Les emplacements du magasin système sont ouverts à distance en préfixant le nom du magasin dans la chaîne passée à pvPara avec le nom de l’ordinateur. Voici quelques exemples de noms de magasins système distants :
- ComputerName\CA
- \\ComputerName\CA
- ComputerName\ServiceName\Trust
- \\ComputerName\ServiceName\Trust
Pour plus d’informations sur les magasins système, consultez Emplacements du magasin système.
Pour plus d’informations sur les magasins qui sont migrés automatiquement, consultez migration du magasin de certificats.
Exemples
L’exemple suivant montre l’ouverture de plusieurs magasins de certificats de différents types de fournisseurs de magasin. L’exemple utilise la fonction CreateMyDACL, définie dans la rubrique Création d’une DACL, pour vous assurer que le fichier ouvert est créé avec une liste DACL appropriée. Pour plus d’exemples d’ouverture d’autres types de fournisseurs de magasin, consultez Exemple de code C pour l’ouverture de magasins de certificats.
//-------------------------------------------------------------------
// 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");
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau | Applications UWP] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau | Applications UWP] |
plateforme cible | Windows |
d’en-tête | wincrypt.h |
bibliothèque | Crypt32.lib |
DLL | Crypt32.dll |