Fungsi CryptDecodeObject (wincrypt.h)

Fungsi CryptDecodeObject mendekode struktur jenis yang ditunjukkan oleh parameter lpszStructType . Penggunaan CryptDecodeObjectEx direkomendasikan sebagai API yang melakukan fungsi yang sama dengan peningkatan performa yang signifikan.

Sintaks

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

Parameter

[in] dwCertEncodingType

Jenis pengodean yang digunakan. Selalu dapat diterima untuk menentukan jenis pengodean sertifikat dan pesan dengan menggabungkannya dengan operasi bitwise-OR seperti yang ditunjukkan dalam contoh berikut:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Jenis pengodean yang saat ini ditentukan adalah:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING
Catatan Jenis pengodean sertifikat atau pesan diperlukan. X509_ASN_ENCODING adalah default. Jika jenis tersebut ditunjukkan, jenis tersebut digunakan. Jika tidak, jika jenis PKCS7_ASN_ENCODING ditunjukkan, jenis tersebut akan digunakan.
 

[in] lpszStructType

Penunjuk ke OID yang menentukan jenis struktur. Jika kata urutan tinggi dari parameter lpszStructType adalah nol, kata urutan rendah menentukan pengidentifikasi bilangan bulat untuk jenis struktur yang ditentukan. Jika tidak, parameter ini adalah penunjuk panjang ke string yang dihentikan null.

Untuk informasi selengkapnya tentang string pengidentifikasi objek, konstanta yang telah ditentukan dan struktur yang sesuai, lihat Konstanta untuk CryptEncodeObject dan CryptDecodeObject.

[in] pbEncoded

Penunjuk ke struktur yang dikodekan untuk didekodekan.

[in] cbEncoded

Jumlah byte yang diacu oleh pbEncoded.

[in] dwFlags

Bendera berikut ditentukan. Mereka dapat dikombinasikan dengan operasi bitwise-OR.

Nilai Makna
CRYPT_DECODE_NOCOPY_FLAG
Bendera ini dapat diatur untuk menunjukkan bahwa pengoptimalan "tidak ada salinan" diaktifkan. Pengoptimalan ini, jika berlaku, memperbarui parameter pvStructInfo untuk menunjuk ke konten yang berada dalam pbEncoded alih-alih membuat salinan konten dan menambahkannya ke pvStructInfo. Untuk kasus yang berlaku, lebih sedikit memori yang perlu dialokasikan oleh aplikasi panggilan dan eksekusi lebih cepat karena salinan tidak dibuat. Perhatikan bahwa trade-off saat melakukan decoding "no copy" adalah bahwa pbEncoded tidak dapat dibebaskan sampai pvStructInfo dibebaskan.
CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG
Bendera ini berlaku saat mendekode X509_UNICODE_NAME, X509_UNICODE_NAME_VALUE, atau X509_UNICODE_ANY_STRING. Secara default, CERT_RDN_T61_STRING nilai yang dikodekan awalnya didekodekan sebagai UTF8. Jika pendekodean UTF8 gagal, maka nilai didekodekan sebagai karakter delapan-bit. Jika bendera ini diatur, bendera ini melompati upaya awal untuk mendekode nilai sebagai UTF8 dan mendekode nilai sebagai karakter delapan-bit.
CRYPT_DECODE_TO_BE_SIGNED_FLAG
Secara default, konten buffer yang diacu oleh pbEncoded menyertakan konten yang ditandatangani dan tanda tangan. Jika bendera ini diatur, buffer hanya menyertakan konten "yang akan ditandatangani". Bendera ini berlaku untuk objek X509_CERT_TO_BE_SIGNED, X509_CERT_CRL_TO_BE_SIGNED, X509_CRT_REQUEST_TO_BE_SIGNED, dan X509_KEYGEN_REQUEST_TO_BE_SIGNED.
CRYPT_DECODE_SHARE_OID_STRING_FLAG
Ketika bendera ini diatur, string OID dialokasikan di Crypt32.dll dan dibagikan alih-alih disalin ke dalam struktur data yang dikembalikan. Bendera ini dapat diatur jika Crypt32.dll tidak dibongkar sebelum pemanggil dibongkar.
CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG
Secara default, byte tanda tangan dibalik. Jika bendera ini diatur, pembalikan byte ini dihambat.

[out] pvStructInfo

Penunjuk ke buffer untuk menerima struktur yang didekodekan. Ketika buffer yang ditentukan tidak cukup besar untuk menerima struktur yang didekodekan, fungsi mengatur kode ERROR_MORE_DATA dan menyimpan ukuran buffer yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh pcbStructInfo.

Parameter ini dapat berupa NULL untuk mengambil ukuran informasi ini untuk tujuan alokasi memori. Untuk informasi selengkapnya, lihat Mengambil Data Dengan Panjang Tidak Diketahui.

[in, out] pcbStructInfo

Penunjuk ke nilai DWORD yang menentukan ukuran, dalam byte, dari buffer yang diacu oleh parameter pvStructInfo . Ketika fungsi kembali, nilai DWORD ini berisi ukuran data yang didekodekan yang disalin ke pvStructInfo. Ukuran yang terkandung dalam variabel yang diacu oleh pcbStructInfo dapat menunjukkan ukuran yang lebih besar dari struktur yang didekodekan, karena struktur yang didekodekan dapat mencakup pointer ke struktur lain. Ukuran ini adalah jumlah ukuran yang diperlukan oleh struktur yang didekodekan dan struktur lain yang ditujukan.

Catatan Saat memproses data yang dikembalikan dalam buffer, aplikasi harus menggunakan ukuran aktual data yang dikembalikan. Ukuran aktual bisa sedikit lebih kecil dari ukuran buffer yang ditentukan pada input. (Pada input, ukuran buffer biasanya ditentukan cukup besar untuk memastikan bahwa data output terbesar yang mungkin cocok di buffer.) Pada output, variabel yang diacu oleh parameter ini diperbarui untuk mencerminkan ukuran aktual data yang disalin ke buffer.
 

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan bukan nol (TRUE).

Jika fungsi gagal, nilai yang dikembalikan adalah nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError. Beberapa kemungkinan kode kesalahan tercantum dalam tabel berikut.

Menampilkan kode Deskripsi
CRYPT_E_BAD_ENCODE
Terjadi kesalahan saat mendekode.
ERROR_FILE_NOT_FOUND
Fungsi decoding tidak dapat ditemukan untuk dwCertEncodingType dan lpszStructType yang ditentukan
ERROR_MORE_DATA
Jika buffer yang ditentukan oleh parameter pvStructInfo tidak cukup besar untuk menyimpan data yang dikembalikan, fungsi mengatur kode ERROR_MORE_DATA dan menyimpan ukuran buffer yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh pcbStructInfo.
 

Jika fungsi gagal, GetLastError dapat mengembalikan kesalahan pengodean/pendekodean Abstract Syntax Notation One (ASN.1). Untuk informasi tentang kesalahan ini, lihat Nilai Pengembalian Pengodean/Pendekodean ASN.1.

Keterangan

Saat mengodekan objek kriptografi menggunakan fungsi CryptEncodeObjectEx pilihan, karakter NULL yang mengakhiri disertakan. Saat mendekode, menggunakan fungsi CryptDecodeObjectEx pilihan, karakter NULL yang mengakhiri tidak dipertahankan.

Contoh

Untuk contoh yang menggunakan fungsi ini, lihat Contoh Program C: Pengodean dan Pendekodean ASN.1.

Persyaratan

   
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header wincrypt.h
Pustaka Crypt32.lib
DLL Crypt32.dll

Lihat juga

CryptDecodeObjectEx

CryptEncodeObject

Fungsi Pengodean dan Pendekodean Objek