Кодирование структуры CERT_INFO
Процесс кодирования является обратным процессу декодирования, описанному в разделе Декодирование структуры CERT_INFO. Например, следующая процедура добавит закодированный издатель в структуру CERT_INFO . См. также рисунок, следующий за процедурой.
Добавление закодированного издателя в структуру CERT_INFO
- Создайте строку, содержащую имя издателя, которое будет использоваться.
- Создайте массив CERT_RDN_ATTR структур, который будет инициализирован, чтобы содержать правильные сведения о только что созданной строке имени издателя.
- Создайте массив CERT_RDN структур, одна из которых содержит сведения о массиве CERT_RDN_ATTR структур, которые только что инициализированы.
- Создайте структуру CERT_NAME_INFO с указателем на только что созданный массив CERT_RDN структур.
- Вызовите CryptEncodeObject , чтобы получить размер закодированного большого двоичного объекта, передав ему адрес только что созданной структуры CERT_NAME_INFO .
- Выделение памяти для большого двоичного объекта с кодировкой вывода.
- Снова вызовите CryptEncodeObject , передав ему те же сведения, но теперь передав ему адрес только что выделенной памяти.
- Задайте для элемента Issuer.cbData структуры CERT_INFO размер, возвращенный на шаге 5, а для элемента Issuer.pbData — адрес, полученный на шаге 6. Закодированный большой двоичный объект issuer теперь находится там.
Чтобы инициализировать и закодировать некоторые сведения о расширении сертификата, используйте следующую процедуру. См. также рисунок, следующий за процедурой.
Добавление закодированных сведений о расширении в структуру CERT_INFO
- Создайте и инициализируйте структуру сведений о расширении. В этом примере это структура CERT_BASIC_CONSTRAINTS_INFO .
- Вызовите CryptEncodeObject, передав ему адрес только что созданной структуры, чтобы получить размер выходного закодированного большого двоичного объекта.
- Выделение памяти для большого двоичного объекта с кодировкой вывода.
- Снова вызовите CryptEncodeObject , передав те же сведения, за исключением адреса выделенной памяти.
- Создание массива CERT_EXTENSION структур.
- Инициализируйте одну из структур CERT_EXTENSION таким образом, чтобы pszObjId был правильной строкой для данных, содержащихся в параметре Value, а значение содержит зашифрованный большой двоичный объект данных, полученный при вызове CryptEncodeObject.
- Инициализируйте элемент rgExtensionструктуры CERT_INFO , чтобы указать массив CERT_EXTENSION структур.