Función CryptDecodeObject (wincrypt.h)

La función CryptDecodeObject descodifica una estructura del tipo indicado por el parámetro lpszStructType . El uso de CryptDecodeObjectEx se recomienda como UNA API que realice la misma función con importantes mejoras de rendimiento.

Sintaxis

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
);

Parámetros

[in] dwCertEncodingType

Tipo de codificación usada. Siempre es aceptable especificar los tipos de codificación de certificados y mensajes mediante su combinación con una operación OR bit a bit, como se muestra en el ejemplo siguiente:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Los tipos de codificación definidos actualmente son:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING
Nota Se requiere un tipo de codificación de certificado o mensaje . X509_ASN_ENCODING es el valor predeterminado. Si se indica ese tipo, se usa. De lo contrario, si se indica el tipo PKCS7_ASN_ENCODING, se usa.
 

[in] lpszStructType

Puntero a un OID que define el tipo de estructura. Si la palabra de orden superior del parámetro lpszStructType es cero, la palabra de orden bajo especifica el identificador entero para el tipo de la estructura especificada. De lo contrario, este parámetro es un puntero largo a una cadena terminada en null.

Para obtener más información sobre las cadenas de identificador de objeto, sus constantes predefinidas y las estructuras correspondientes, vea Constantes para CryptEncodeObject y CryptDecodeObject.

[in] pbEncoded

Puntero a la estructura codificada que se va a descodificar.

[in] cbEncoded

Número de bytes a los que apunta pbEncoded.

[in] dwFlags

Se definen las marcas siguientes. Se pueden combinar con una operación OR bit a bit.

Value Significado
CRYPT_DECODE_NOCOPY_FLAG
Esta marca se puede establecer para indicar que la optimización "sin copia" está habilitada. Esta optimización, si procede, actualiza el parámetro pvStructInfo para que apunte al contenido que reside en pbEncoded en lugar de realizar una copia del contenido y anexarlo a pvStructInfo. En los casos aplicables, la aplicación que realiza la llamada debe asignar menos memoria y la ejecución es más rápida porque no se realiza una copia. Tenga en cuenta que el equilibrio al realizar una descodificación "sin copia" es que pbEncoded no se puede liberar hasta que pvStructInfo se libere.
CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG
Esta marca es aplicable al descodificar X509_UNICODE_NAME, X509_UNICODE_NAME_VALUE o X509_UNICODE_ANY_STRING. De forma predeterminada, CERT_RDN_T61_STRING valores codificados se descodifican inicialmente como UTF8. Si se produce un error en la descodificación UTF8, el valor se descodifica como caracteres de ocho bits. Si se establece esta marca, omite el intento inicial de descodificar el valor como UTF8 y descodifica el valor como caracteres de ocho bits.
CRYPT_DECODE_TO_BE_SIGNED_FLAG
De forma predeterminada, el contenido del búfer al que apunta pbEncoded incluía el contenido firmado y la firma. Si se establece esta marca, el búfer solo incluye el contenido "que se va a firmar". Esta marca se aplica a objetos X509_CERT_TO_BE_SIGNED, X509_CERT_CRL_TO_BE_SIGNED, X509_CRT_REQUEST_TO_BE_SIGNED y X509_KEYGEN_REQUEST_TO_BE_SIGNED.
CRYPT_DECODE_SHARE_OID_STRING_FLAG
Cuando se establece esta marca, las cadenas de OID se asignan en Crypt32.dll y se comparten en lugar de copiarse en la estructura de datos devuelta. Esta marca se puede establecer si Crypt32.dll no se descarga antes de que se descargue el autor de la llamada.
CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG
De forma predeterminada, se invierten los bytes de firma. Si se establece esta marca, esta inversión de bytes se impide.

[out] pvStructInfo

Puntero a un búfer para recibir la estructura descodificada. Cuando el búfer especificado no es lo suficientemente grande como para recibir la estructura descodificada, la función establece el código ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbStructInfo.

Este parámetro puede ser NULL para recuperar el tamaño de esta información con fines de asignación de memoria. Para obtener más información, vea Recuperación de datos de longitud desconocida.

[in, out] pcbStructInfo

Puntero a un valor DWORD que especifica el tamaño, en bytes, del búfer al que apunta el parámetro pvStructInfo . Cuando se devuelve la función, este valor DWORD contiene el tamaño de los datos descodificados copiados en pvStructInfo. El tamaño contenido en la variable a la que apunta pcbStructInfo puede indicar un tamaño mayor que la estructura descodificada, ya que la estructura descodificada puede incluir punteros a otras estructuras. Este tamaño es la suma del tamaño necesario para la estructura descodificada y otras estructuras a las que se apunta.

Nota Al procesar los datos devueltos en el búfer, las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en la entrada. (En la entrada, los tamaños del búfer suelen especificarse lo suficientemente grandes como para asegurarse de que los datos de salida más grandes posibles se ajusten al búfer). En la salida, la variable a la que apunta este parámetro se actualiza para reflejar el tamaño real de los datos copiados en el búfer.
 

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero (TRUE).

Si se produce un error en la función, el valor devuelto es cero (FALSE). Para obtener información de error extendida, llame a GetLastError. Algunos códigos de error posibles se enumeran en la tabla siguiente.

Código devuelto Descripción
CRYPT_E_BAD_ENCODE
Error al descodificar.
ERROR_FILE_NOT_FOUND
No se encontró una función de descodificación para dwCertEncodingType y lpszStructType especificados.
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pvStructInfo no es lo suficientemente grande como para contener los datos devueltos, la función establece el código ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbStructInfo.
 

Si se produce un error en la función, GetLastError puede devolver un error de codificación y descodificación de sintaxis abstracta uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación y descodificación de ASN.1.

Comentarios

Al codificar un objeto criptográfico mediante la función CryptEncodeObjectEx preferida, se incluye el carácter NULL de terminación. Al descodificar, con la función CryptDecodeObjectEx preferida, no se conserva el carácter NULL de terminación.

Ejemplos

Para obtener un ejemplo que usa esta función, vea Ejemplo de programa C: Codificación y descodificación de ASN.1.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptDecodeObjectEx

CryptEncodeObject

Funciones de codificación y descodificación de objetos