Функция CertOpenStore (wincrypt.h)
Функция CertOpenStore
Синтаксис
HCERTSTORE CertOpenStore(
[in] LPCSTR lpszStoreProvider,
[in] DWORD dwEncodingType,
[in] HCRYPTPROV_LEGACY hCryptProv,
[in] DWORD dwFlags,
[in] const void *pvPara
);
Параметры
[in] lpszStoreProvider
Указатель на строку ANSI, завершающую значение NULL, которая содержит тип поставщика хранилища.
Следующие значения представляют предопределенные типы хранилищ. Тип поставщика хранилища определяет содержимое параметра pvPara, а также использование и значение высокого слова параметра dwFlags. Дополнительные поставщики хранилища можно установить или зарегистрировать с помощью функции CryptInstallOIDFunctionAddress или функции CryptRegisterOIDFunction. Дополнительные сведения о добавлении поставщиков магазинов см. в расширении функциональных возможностей CertOpenStore.
Ценность | Значение |
---|---|
|
Открывает магазин, который будет коллекцией других магазинов. Хранилища добавляются в коллекцию или удаляются с помощью CertAddStoreToCollection и CertRemoveStoreFromCollection. При добавлении хранилища в коллекцию все сертификаты, списки запросов и списки сертификатов в этом хранилище становятся доступными для поиска или перечисления хранилища коллекций.
Высокое слово dwFlags равно нулю. значение pvPara: Параметр pvPara должен быть NULL. |
|
Инициализирует хранилище с сертификатами, списками отзыва сертификатов и списками сертификатов, считываемыми из указанного открытого файла. Этот поставщик ожидает, что файл будет содержать только сериализованное хранилище, а не подписанные сообщения PKCS #7 или один закодированный сертификат.
Указатель на файл должен быть расположен в начале сериализованного хранилища данных. После загрузки данных в сериализованное хранилище в хранилище сертификатов указатель файла размещается в начале любых данных, которые могут следовать сериализованным данным хранилища в файле. Если CERT_FILE_STORE_COMMIT_ENABLE задан в dwFlags, дескриптор файла дублируется, а хранилище всегда фиксируется как сериализованное хранилище. Файл не закрывается при закрытии хранилища. значение pvPara: Параметр pvPara должен содержать указатель на дескриптор файла, открытый с помощью CreateFile. |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из файла. Поставщик открывает файл и сначала пытается прочитать файл в виде сериализованного хранилища, а затем в виде подписанного сообщения PKCS #7 и, наконец, в виде одного закодированного сертификата.
Параметр dwEncodingType должен содержать типы кодирования, используемые как с сообщениями, так и с сертификатами. Если файл содержит X.509 закодированный сертификат, открытая операция завершается ошибкой, а вызов функции GetLastError возвращает ERROR_ACCESS_DENIED. Если флаг CERT_FILE_STORE_COMMIT_ENABLE задан в dwFlags, значение dwCreationDisposition, переданное CreateFile, выглядит следующим образом:
Если dwFlags включает CERT_FILE_STORE_COMMIT_ENABLE, файл фиксируется как PKCS #7 или сериализованное хранилище в зависимости от типа файла, открытого. Если файл был пустым или если имя файла имеет расширение P7c или SPC, файл фиксируется как PKCS #7. В противном случае файл фиксируется как сериализованное хранилище. значение pvPara: Параметр pvPara должен содержать указатель на строку ANSI, завершающую значение NULL, содержащую имя существующего нераскрытого файла. |
|
То же, что и CERT_STORE_PROV_FILENAME_A.
значение pvPara: Параметр pvPara должен содержать указатель на строку Юникода, завершающую значение NULL, которая содержит имя существующего нераскрытого файла. |
|
Инициализирует хранилище с сертификатами, crLs и CTLs из результатов запроса LDAP.
Для выполнения операций записи в хранилище строка запроса должна указывать базовый запрос без фильтра и одного атрибута. значение pvPara: Если параметр dwFlags содержит CERT_LDAP_STORE_OPENED_FLAG, задайте pvPara адрес структуры CERT_LDAP_STORE_OPENED_PARA, указывающей используемый сеанс LDAP. В противном случае задайте для pvPara указывать на строку Юникода, завершающую значение NULL, содержащую строку запроса LDAP. Дополнительные сведения о строках запросов LDAP см. в диалекте LDAP. |
|
Создает хранилище сертификатов в кэшированном памяти. Нет сертификатов, списки отзыва сертификатов (CRLs) или списки доверия сертификатов списки доверия сертификатов (CTLS) изначально загружаются в хранилище. Обычно используется для создания временного хранилища.
Любое добавление сертификатов, списков отзыва сертификатов или списков сертификатов или изменений в свойствах сертификатов, списков отзыва сертификатов или списков сертификатов в хранилище памяти не сохраняются автоматически. Их можно сохранить в файле или в память BLOB с помощью CertSaveStore. значение pvPara: параметр pvPara не используется. |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из указанного криптографического сообщения. Параметр dwEncodingType |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из указанного физического хранилища, являющегося членом логического системного хранилища.
Два имени разделены промежуточным обратным косой чертой (\), например Root.Default. Здесь "Root" — это имя системного хранилища и ". Значение по умолчанию — это имя физического хранилища. Имена системных и физических хранилищ не могут содержать обратные очки. Высокое слово dwFlags указывает расположение системного хранилища, обычно CERT_SYSTEM_STORE_CURRENT_USER. Дополнительные сведения см. в разделе dwFlags далее в этом разделе и см. в разделе расположения системного хранилища. Некоторые расположения физического хранилища можно открывать удаленно. значение pvPara: параметр pvPara указывает на строку Юникода, завершающую значение NULL, которая содержит имя и физическое имя хранилища системы. |
|
Инициализирует хранилище с сертификатами, crLs и CTLs из подписанного сообщения PKCS #7. Параметр dwEncodingType должен указывать типы кодирования, которые будут использоваться как с сообщениями, так и с сертификатами.
значение pvPara: Параметр pvPara указывает на структуру CRYPT_DATA_BLOB, представляющую закодированное сообщение. |
|
Инициализирует хранилище с содержимым пакета PKCS #12.
Если пакет PKCS #12 защищен с помощью NULL или пустого пароля, эта функция завершится успешно при открытии хранилища. Начиная с Windows 8 и Windows Server 2012, если пароль, внедренный в пакет PFX, был защищен субъектом Active Directory (AD) и текущим пользователем в качестве члена этого субъекта, имеет разрешение расшифровать пароль, эта функция будет успешно открывать хранилище. Дополнительные сведения см. в параметре Вы можете защитить пароли PFX для субъекта AD, начиная с Windows 8 и Windows Server 2012. значение pvPara: Параметр pvPara указывает на структуру CRYPT_DATA_BLOB, представляющую пакет PKCS #12. |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из подраздела реестра.
Этот поставщик открывает или создает вложенные разделы реестра сертификатов, списки отзыва сертификатови списки ctls в разделе, переданном в pvPara. Входной ключ не закрывается поставщиком. Перед возвратом поставщик открывает собственную копию ключа, переданного в pvPara. Если CERT_STORE_READONLY_FLAG задано в низком слове dwFlags, разделы реестра открываются с помощью RegOpenKey с KEY_READ_ACCESS. В противном случае подразделы реестра создаются с помощью RegCreateKey с KEY_ALL_ACCESS. Все изменения содержимого открытого хранилища немедленно сохраняются в реестре. Однако если CERT_STORE_READONLY_FLAG задано в низком слове dwFlags, любая попытка добавить в содержимое хранилища или изменить свойство контекста приводит к ошибке с GetLastError возвращая код E_ACCESSDENIED. значение pvPara: Параметр pvPara содержит дескриптор открытого раздела реестра. |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из расположения памяти, содержащего сериализованное хранилище.
значение pvPara: Параметр pvPara указывает на структуру CRYPT_DATA_BLOB, содержащую сериализованный большой двоичный объект памяти. |
|
В настоящее время не используется. |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из указанного системного хранилища.
Системное хранилище — это логическое хранилище коллекций, состоящее из одного или нескольких физических хранилищ. Физическое хранилище, связанное с системным хранилищем, зарегистрировано в функции CertRegisterPhysicalStore. После открытия системного хранилища все физические хранилища, связанные с ним, также открываются вызовами CertOpenStore и добавляются в коллекцию системного хранилища с помощью функции CertAddStoreToCollection. Высокое слово dwFlags указывает расположение системного хранилища, обычно заданное для CERT_SYSTEM_STORE_CURRENT_USER. Дополнительные сведения о расположениях реестра см. в разделе dwFlags далее в этом разделе и расположения системного хранилища. Некоторые расположения системного хранилища можно открывать удаленно; Дополнительные сведения см. в разделе "Расположения system Store". значении pvPara: параметр pvPara указывает на строку ANSI, завершающую значение NULL, содержащую имя хранилища системы, например "My" или "Root". |
|
То же, что и CERT_STORE_PROV_SYSTEM_A.
значение pvPara: Параметр pvPara указывает на строку Юникода, завершающую значение NULL, содержащую имя хранилища системы, например "My" или "Root". |
|
Инициализирует хранилище с помощью сертификатов, списков отзыва сертификатов и списков сертификатов из физического хранилища реестра. Физическое хранилище не открывается как хранилище коллекций. Перечисления и поиски проходят только сертификаты, списки запросов и списки сертификатов в этом физическом хранилище.
Высокое слово dwFlags указывает расположение системного хранилища, обычно заданное для CERT_SYSTEM_STORE_CURRENT_USER. Дополнительные сведения см. в разделе dwFlags далее в этом разделе. Некоторые расположения системного хранилища могут быть открыты удаленно; Дополнительные сведения см. в разделе Расположения системного хранилища. значении pvPara: параметр pvPara указывает на строку ANSI, завершающую значение NULL, содержащую имя хранилища системы, например "My" или "Root". |
|
То же, что и CERT_STORE_PROV_SYSTEM_REGISTRY_A.
значение pvPara: Параметр pvPara указывает на строку Юникода, завершающую значение NULL, содержащую имя хранилища системы, например "My" или "Root". |
[in] dwEncodingType
Указывает тип кодирования
Этот параметр применяется только в том случае, если тип поставщика CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7или CERT_STORE_PROV_FILENAME указан в параметре lpszStoreProvider. Для всех других типов поставщиков этот параметр не используется и должен иметь значение нулю.
Этот параметр может быть сочетанием одного или нескольких следующих значений.
Ценность | Значение |
---|---|
|
Указывает кодировку сообщений PKCS #7. |
|
Задает кодировку сертификата X.509. |
[in] hCryptProv
Этот параметр не используется и должен иметь значение NULL.
Windows Server 2003 и Windows XP: дескриптор криптографического поставщика. Передача null для этого параметра приводит к использованию соответствующего поставщика по умолчанию. Рекомендуется использовать поставщик по умолчанию. По умолчанию или указанный поставщик шифрования используется для всех функций хранилища, которые проверяют подпись сертификата субъекта или списка отзыва сертификатов. Тип данных этого параметра HCRYPTPROV.
[in] dwFlags
Эти значения состоят из значений high-word и low-word, объединенных с помощью побитовойИЛИ операции.
Низкая часть
Ценность | Значение |
---|---|
|
Используйте SE_BACKUP_NAME потока и SE_RESTORE_NAME привилегии для открытия реестра или файловых системных хранилищ. Если у потока нет этих привилегий, эта функция должна завершиться ошибкой отказа в доступе. |
|
Новое хранилище создается, если он не существует. Функция завершается ошибкой, если хранилище уже существует.
Если ни CERT_STORE_OPEN_EXISTING_FLAG, ни CERT_STORE_CREATE_NEW_FLAG задано, хранилище открывается, если он существует или создается и открыт, если он еще не существует. |
|
Отложите закрытие поставщика хранилища до тех пор, пока не будут использоваться все сертификаты, списки отзыва сертификатов или списки сертификатов, полученные из хранилища. Хранилище фактически закрывается, когда последний сертификат, CRL или CTL, полученный из хранилища, освобождается. Все изменения, внесенные в свойства этих сертификатов, списков отзыва сертификатов и списков сертификатов, даже после вызова CertCloseStore.
Если этот флаг не задан, а сертификаты, списки отзыва сертификатов или списки ctls, полученные из хранилища, по-прежнему используются, любые изменения свойств этих сертификатов, списков отзыва сертификатов и списков сертификатов не будут сохранены. Если эта функция вызывается с CERT_CLOSE_STORE_FORCE_FLAG, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG игнорируется. Если этот флаг задан и значение параметраnullhCryptProv передается, этот поставщик будет продолжать использоваться даже после вызова этой функции. |
|
Хранилище удаляется вместо открытия. Эта функция возвращает null для успешного и неудачного удаления. Чтобы определить успешное удаление, вызовите GetLastError, которая возвращает ноль, если хранилище было удалено и ненулевое значение, если оно не было удалено. |
|
Как правило, перечисление всех сертификатов в хранилище будет игнорировать любой сертификат с набором свойств CERT_ARCHIVED_PROP_ID. Если этот флаг задан, перечисление сертификатов в хранилище будет содержать все сертификаты в хранилище, включая те, которые имеют свойство CERT_ARCHIVED_PROP_ID. |
|
Откройте хранилище с максимальным набором разрешенных разрешений. Если этот флаг указан, хранилища реестра сначала открываются с доступом на запись и при сбое, они повторно открываются с доступом только для чтения. |
|
Этот флаг не используется, если параметр hCryptProvNULL. Этот флаг действителен, только если дескриптор CSP, отличный отNULL, передается в качестве параметра hCryptProv. При закрытии хранилища сертификатов этот флаг предотвращает автоматическое освобождение неотделяемого CSP. |
|
Откройте только существующее хранилище. Если хранилище не существует, функция завершается ошибкой. |
|
Откройте хранилище в режиме только для чтения. Любая попытка изменить содержимое хранилища приведет к ошибке. Если этот флаг установлен и используется поставщик хранилища на основе реестра, вложенные разделы реестра открываются с помощью RegOpenKey с KEY_READ_ACCESS. В противном случае вложенные разделы реестра создаются с помощью RegCreateKey с KEY_ALL_ACCESS. |
|
Если этот флаг поддерживается, поставщик задает свойство CERT_STORE_LOCALIZED_NAME_PROP_ID магазина. Локализованное имя можно получить, вызвав функцию CertGetStoreProperty с dwPropID значение CERT_STORE_LOCALIZED_NAME_PROP_ID. Этот флаг поддерживается для поставщиков типов CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYи CERT_STORE_PROV_PHYSICAL_W. |
|
При открытии хранилища можно задать этот флаг, чтобы обеспечить эффективное использование памяти, повторно используя память для закодированных частей сертификата, CRL или CTL в открытых экземплярах хранилищ. |
|
Списки идентификаторов ключей существуют в CurrentUser и LocalMachine. Эти идентификаторы ключей имеют свойства, такие как свойства сертификатов. Если задана CERT_STORE_UPDATE_KEYID_FLAG, то для каждого идентификатора ключа в расположении хранилища, имеющего свойство CERT_KEY_PROV_INFO_PROP_ID, это свойство автоматически обновляется из свойства идентификатора ключа CERT_KEY_PROV_INFO_PROP_ID или CERT_KEY_IDENTIFIER_PROP_ID сертификата, связанного с этим идентификатором ключа. |
Типы поставщиков CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYи CERT_STORE_PROV_PHYSICAL используют следующие высокие слова dwFlags, чтобы указать расположения реестра системного хранилища:
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
По умолчанию расположение системного хранилища открывается относительно HKEY_CURRENT_USER, HKEY_LOCAL_MACHINEили HKEY_USERS предопределенного раздела реестра. Дополнительные сведения см. в разделе Расположения системного хранилища.
Следующие флаги с высоким уровнем слов переопределяют это поведение по умолчанию.
Ценность | Значение |
---|---|
|
При установке pvPara должен содержать указатель на структуру CERT_SYSTEM_STORE_RELOCATE_PARA, а не строку. Структура указывает имя хранилища и его расположение в реестре. |
|
По умолчанию при открытии хранилища CurrentUser "Root" все корни SystemRegistry, не находящиеся в защищенном корневом списке, удаляются из кэша до возврата этой функции. Если этот флаг задан, этот по умолчанию переопределяется, и возвращаются все корни в SystemRegistry, и проверка защищенного корневого списка не выполняется. |
Поставщик CERT_STORE_PROV_REGISTRY использует следующие флаги высокого уровня.
Ценность | Значение |
---|---|
|
pvPara содержит дескриптор раздела реестра на удаленном компьютере. Чтобы получить доступ к разделу реестра на удаленном компьютере, необходимо задать разрешения безопасности на удаленном компьютере, чтобы разрешить доступ. Дополнительные сведения см. в разделе "Примечания". |
|
Поставщик CERT_STORE_PROV_REG сохраняет сертификаты, списки отзыва сертификатов и списки ctls в одном сериализованном подразделе хранилища вместо выполнения операции сохранения по умолчанию. По умолчанию каждый сертификат, список отзыва сертификатов или CTL сохраняется в виде отдельного подраздела реестра в соответствующем подразделе.
Этот флаг в основном используется для магазинов, скачанных из шаблона групповой политики (GPT), таких как хранилища CurrentUserGroupPolicy и LocalMachineGroupPolicy. Если CERT_REGISTRY_STORE_SERIALIZED_FLAG задано, сохраняются дополнения, удаления или изменения свойств, пока не будет выполнен вызов CertCloseStore или CertControlStore с помощью CERT_STORE_CTRL_COMMIT. |
Типы поставщиков CERT_STORE_PROV_FILE и CERT_STORE_PROV_FILENAME используют следующие флаги высокого слова.
Ценность | Значение |
---|---|
|
Установка этого флага фиксирует любые дополнения к хранилищу или любые изменения, внесенные в свойства контекстов в хранилище файлов либо при вызове CertCloseStore, либо при вызове CertControlStore с CERT_STORE_CONTROL_COMMIT.
CertOpenStore завершается ошибкой E_INVALIDARG, если CERT_FILE_STORE_COMMIT_ENABLE и CERT_STORE_READONLY_FLAG заданы в dwFlags. |
Тип поставщика CERT_STORE_PROV_LDAP использует следующие флаги высокого слова.
Ценность | Значение |
---|---|
|
Выполняет поиск DNS только для записи по URL-адресу с именем в параметре pvPara. Это предотвращает создание ложных запросов DNS при разрешении имен узлов URL-адресов. Используйте этот флаг при передаче имени узла в отличие от имени домена для параметра pvPara. |
|
Используйте этот флаг для использования существующего сеанса LDAP. При указании этого флага параметр |
|
Чтобы обеспечить целостность, необходимую для некоторых приложений, цифрово подписать весь трафик LDAP на сервер LDAP и с сервера LDAP с помощью протокола проверки подлинности Kerberos. |
|
Используйте этот флаг с флагом CERT_LDAP_STORE_OPENED_FLAG, чтобы сеанс LDAP был отключен при закрытии хранилища. Система отменит привязку сеанса LDAP с помощью функции ldap_unbind при закрытии хранилища. |
[in] pvPara
32-разрядное значение, которое может содержать дополнительные сведения для этой функции. Содержимое этого параметра зависит от значения lpszStoreProvider и других параметров.
Возвращаемое значение
Если функция выполнена успешно, функция возвращает дескриптор в хранилище сертификатов . По завершении использования хранилища отпустите дескриптор, вызвав функцию CertCloseStore.
Если функция завершается ошибкой, она возвращает NULL. Для получения расширенных сведений об ошибке вызовите GetLastError.
Замечания
Системное хранилище — это коллекция, состоящая из одного или нескольких физических одноуровневых хранилищ. Для каждого системного хранилища существуют предопределенные физические одноуровневые хранилища. После открытия системного хранилища, например "My" в CERT_SYSTEM_STORE_CURRENT_USER, вызывается вызов CertOpenStore для открытия всех физических хранилищ в коллекции системного хранилища. Каждый из этих физических хранилищ добавляется в коллекцию системного хранилища с помощью функции CertAddStoreToCollection. Все сертификаты, crls и списки ctls в этих физических хранилищах доступны через коллекцию логических системных хранилищ.
Следующие расположения системного хранилища можно открывать удаленно:
- CERT_SYSTEM_STORE_LOCAL_MACHINE
- CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
- CERT_SYSTEM_STORE_SERVICES
- CERT_SYSTEM_STORE_USERS
Расположения хранилища системы открываются удаленно путем префикса имени хранилища в строке, переданной в pvPara с именем компьютера. Примерами имен удаленного хранилища систем являются:
- ComputerName\ЦС
- \\ComputerName\ЦС
- ComputerName\ServiceName\Trust
- \\ComputerName\ServiceName\Trust
Дополнительные сведения о системных хранилищах см. в расположениях системного хранилища.
Дополнительные сведения о хранилищах, которые автоматически переносятся, см. в миграции хранилища сертификатов.
Примеры
В следующем примере показано открытие нескольких хранилищ сертификатов разных типов поставщиков хранилища. В примере используется функция CreateMyDACL, определенная в разделе Создание DACL, чтобы убедиться, что открытый файл создается с соответствующим daCL. Дополнительные примеры открытия других типов поставщиков хранилища см. в примере кода C для открытия хранилищ сертификатов.
//-------------------------------------------------------------------
// 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");
}
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [классические приложения | Приложения UWP] |
минимальный поддерживаемый сервер | Windows Server 2003 [классические приложения | Приложения UWP] |
целевая платформа | Виндоус |
заголовка | wincrypt.h |
библиотеки |
Crypt32.lib |
DLL | Crypt32.dll |