CryptDecodeObject 関数 (wincrypt.h)

CryptDecodeObject 関数は、lpszStructType パラメーターによって示される型の構造体をデコードします。 パフォーマンスが大幅に向上した同じ関数を実行する API として 、CryptDecodeObjectEx を使用することをお勧めします。

構文

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

使用されるエンコードの種類。 次の例に示すように、証明書と メッセージエンコードの両方の種類 をビットごとの OR 操作と組み合わせて指定することは、常に許容されます。

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

現在定義されているエンコードの種類は次のとおりです。

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING
メモ 証明書または メッセージ エンコードの種類 が必要です。 X509_ASN_ENCODINGが既定値です。 その型が示されている場合は、 が使用されます。 それ以外の場合は、PKCS7_ASN_ENCODING型が示されている場合は、それが使用されます。
 

[in] lpszStructType

構造体の種類を定義する OID へのポインター。 lpszStructType パラメーターの上位ワードが 0 の場合、下位ワードは、指定された構造体の型の整数識別子を指定します。 それ以外の場合、このパラメーターは null で終わる文字列への長いポインターです。

オブジェクト識別子の文字列、定義済みの定数、および対応する構造体の詳細については、「 CryptEncodeObject および CryptDecodeObject の定数」を参照してください。

[in] pbEncoded

デコードするエンコードされた構造体へのポインター。

[in] cbEncoded

pbEncoded が指すバイト数。

[in] dwFlags

次のフラグが定義されています。 これらは、ビットごとの OR 演算と組み合わせることができます。

説明
CRYPT_DECODE_NOCOPY_FLAG
このフラグは、"コピーなし" 最適化が有効になっていることを示すように設定できます。 この最適化 (該当する場合) は、コンテンツのコピーを作成して pvStructInfo に追加するのではなく、 pbEncoded 内に存在するコンテンツを指すように pvStructInfo パラメーターを更新します。 該当するケースでは、呼び出し元のアプリケーションによって割り当てる必要があるメモリが少なくなり、コピーが作成されていないため、実行が高速になります。 "コピーなし" デコードを実行する場合のトレードオフは、pvStructInfo が解放されるまで pbEncoded を解放できないことに注意してください。
CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG
このフラグは、X509_UNICODE_NAME、X509_UNICODE_NAME_VALUE、またはX509_UNICODE_ANY_STRINGをデコードするときに適用されます。 既定では、CERT_RDN_T61_STRINGエンコードされた値は、最初に UTF8 としてデコードされます。 UTF8 デコードが失敗した場合、値は 8 ビット文字としてデコードされます。 このフラグが設定されている場合、値を UTF8 としてデコードする最初の試行をスキップし、値を 8 ビット文字としてデコードします。
CRYPT_DECODE_TO_BE_SIGNED_FLAG
既定では、 pbEncoded によって指されるバッファーの内容には、署名されたコンテンツと署名が含まれていました。 このフラグが設定されている場合、バッファーには "署名する" コンテンツのみが含まれます。 このフラグは、X509_CERT_TO_BE_SIGNED、X509_CERT_CRL_TO_BE_SIGNED、X509_CRT_REQUEST_TO_BE_SIGNED、およびX509_KEYGEN_REQUEST_TO_BE_SIGNED オブジェクトに適用されます。
CRYPT_DECODE_SHARE_OID_STRING_FLAG
このフラグを設定すると、OID 文字列は、返されたデータ構造にコピーされるのではなく、Crypt32.dll で割り当てられ、共有されます。 このフラグは、呼び出し元がアンロードされる前に Crypt32.dll がアンロードされていない場合に設定できます。
CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG
既定では、署名バイトは逆になります。 このフラグが設定されている場合、このバイト反転は禁止されます。

[out] pvStructInfo

デコードされた構造体を受け取るバッファーへのポインター。 指定されたバッファーがデコードされた構造体を受け取るのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbStructInfo が指す変数に格納します。

このパラメーターは、メモリ割り当てのためにこの情報のサイズを取得するために NULL にすることができます 。 詳細については、「不明な 長さのデータの取得」を参照してください。

[in, out] pcbStructInfo

pvStructInfo パラメーターによって指されるバッファーのサイズ (バイト単位) を指定する DWORD 値へのポインター。 関数が戻るときに、この DWORD 値には 、pvStructInfo にコピーされたデコードされたデータのサイズが含まれます。 pcbStructInfo が指す変数に含まれるサイズは、デコードされた構造体に他の構造体へのポインターを含めることができるので、デコードされた構造体よりも大きいサイズを示すことができます。 このサイズは、デコードされた構造体と、指す他の構造体で必要なサイズの合計です。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも若干小さくすることができます。 (入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数は、バッファーにコピーされたデータの実際のサイズを反映するように更新されます。
 

戻り値

関数が成功した場合、戻り値は 0 以外 (TRUE) になります

関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。 次の表に、考えられるエラー コードをいくつか示します。

リターン コード 説明
CRYPT_E_BAD_ENCODE
デコード中にエラーが発生しました。
ERROR_FILE_NOT_FOUND
指定した dwCertEncodingTypelpszStructType に対してデコード関数が見つかりませんでした
ERROR_MORE_DATA
pvStructInfo パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbStructInfo が指す変数に格納します。
 

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

解説

優先する CryptEncodeObjectEx 関数を使用して暗号化オブジェクトをエンコードする場合、終端の NULL 文字が含まれます。 優先する CryptDecodeObjectEx 関数を使用してデコードする場合、終端の NULL 文字は保持されません。

この関数を使用する例については、「 サンプル C プログラム: ASN.1 エンコードとデコード」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CryptDecodeObjectEx

CryptEncodeObject

オブジェクトエンコードおよびデコード関数