Функция CryptDecodeObject (wincrypt.h)
Функция CryptDecodeObject декодирует структуру типа, указанного параметром lpszStructType . Рекомендуется использовать CryptDecodeObjectEx в качестве API, который выполняет ту же функцию со значительными улучшениями производительности.
Синтаксис
BOOL CryptDecodeObject(
[in] DWORD dwCertEncodingType,
[in] LPCSTR lpszStructType,
[in] const BYTE *pbEncoded,
[in] DWORD cbEncoded,
[in] DWORD dwFlags,
[out] void *pvStructInfo,
[in, out] DWORD *pcbStructInfo
);
Параметры
[in] dwCertEncodingType
Тип используемой кодировки. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
В настоящее время определены следующие типы кодирования:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] lpszStructType
Указатель на объект OID, определяющий тип структуры. Если слово высокого порядка параметра lpszStructType равно нулю, слово низкого порядка задает целочисленный идентификатор для типа указанной структуры. В противном случае этот параметр является длинным указателем на строку, завершаемую null.
Дополнительные сведения о строках идентификаторов объектов, их предопределенных константах и соответствующих структурах см. в разделе Константы для CryptEncodeObject и CryptDecodeObject.
[in] pbEncoded
Указатель на декодируемую закодированную структуру.
[in] cbEncoded
Число байтов, на которые указывает pbEncoded.
[in] dwFlags
Определены следующие флаги. Их можно объединить с побитовой операцией ИЛИ .
[out] pvStructInfo
Указатель на буфер для получения декодированных структур. Если указанный буфер недостаточно велик для получения декодированных структур, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbStructInfo.
Этот параметр может иметь значение NULL , чтобы получить размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out] pcbStructInfo
Указатель на значение DWORD , указывающее размер (в байтах) буфера, на который указывает параметр pvStructInfo . При возврате функции это значение DWORD содержит размер декодированных данных, скопированных в pvStructInfo. Размер, содержащийся в переменной, на которую указывает pcbStructInfo , может указывать на размер, превышающий декодированную структуру, так как декодированная структура может включать указатели на другие структуры. Этот размер представляет собой сумму размера, необходимого декодированной структуре и другим структурам, на которые указывает.
Возвращаемое значение
Если функция выполнена успешно, возвращается ненулевое значение (TRUE).
Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Некоторые возможные коды ошибок перечислены в следующей таблице.
Код возврата | Описание |
---|---|
|
Во время декодирования произошла ошибка. |
|
Не удалось найти функцию декодирования для указанных dwCertEncodingType и lpszStructType. |
|
Если буфер, заданный параметром pvStructInfo , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbStructInfo. |
В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Комментарии
При кодировании криптографического объекта с помощью предпочтительной функции CryptEncodeObjectEx включается завершающий символ NULL . При декодировании с помощью предпочтительной функции CryptDecodeObjectEx завершающий символ NULL не сохраняется.
Примеры
Пример использования этой функции см. в разделе Пример программы C: кодирование и декодирование ASN.1.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |