CryptMsgUpdate 関数 (wincrypt.h)

CryptMsgUpdate 関数は、暗号化メッセージに内容を追加します。 この関数を使用すると、 CryptMsgUpdate を繰り返し呼び出すことで、メッセージを 1 つずつ作成できます。 追加されたメッセージ コンテンツは、メッセージが CryptMsgOpenToEncode または CryptMsgOpenToDecode で開かれたかどうかに応じてエンコードまたはデコードされます。

構文

BOOL CryptMsgUpdate(
  [in] HCRYPTMSG  hCryptMsg,
  [in] const BYTE *pbData,
  [in] DWORD      cbData,
  [in] BOOL       fFinal
);

パラメーター

[in] hCryptMsg

更新するメッセージの暗号化メッセージ ハンドル。

[in] pbData

エンコードまたはデコードされるデータを保持するバッファーへのポインター。

[in] cbData

pbData バッファー内のデータのバイト数。

[in] fFinal

エンコードまたはデコード用のデータの最後のブロックが処理されていることを示します。 このフラグの正しい使用法は、処理中のメッセージがデータをデタッチしたかどうかによって異なります。 デタッチされたデータをメッセージに含めることは、メッセージを開いた関数の呼び出しで dwFlags を CMSG_DETACHED_FLAG に設定することによって示されます。

CMSG_DETACHED_FLAGが設定されておらず、 メッセージが CryptMsgOpenToDecode または CryptMsgOpenToEncode を使用して開かれた場合、 fFinalTRUE に設定され、 CryptMsgUpdate は 1 回だけ呼び出されます。

CMSG_DETACHED_FLAG フラグが設定され、メッセージが CryptMsgOpenToEncode を使用して開かれた場合、fFinalCryptMsgUpdate の最後の呼び出しでのみ TRUE に設定されます。

CMSG_DETACHED_FLAG フラグが設定され、メッセージが CryptMsgOpenToDecode を使用して開かれた場合、ヘッダーが CryptMsgUpdate の 1 回の呼び出しで処理されるときに fFinalTRUE に設定されます。 最後にデタッチされたデータ ブロックが処理されるまで、CryptMsgUpdate の後続の呼び出しでデタッチされたデータの処理中に FALSE に設定されます。 CryptMsgUpdate の最後の呼び出しでは、TRUE に設定されます。

デタッチされたデータがデコードされると、メッセージのヘッダーと内容が異なる BLOB に含まれます。 各 BLOB では、その BLOB に対して関数の最後の呼び出しが行われるときに、 fFinalTRUE に設定する必要があります。

戻り値

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

関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。

CryptMsgOpenToDecode および CryptMsgOpenToEncodepStreamInfo によって指定されたアプリケーション定義コールバック関数で発生したエラーは、ストリーミングが使用されている場合に CryptMsgUpdate に反映される可能性があります。 この場合、コールバック関数が戻った後に SetLastErrorCryptMsgUpdate によって呼び出されません。これにより、アプリケーションの制御下で発生したエラーが保持されます。 アプリケーションがストリーミング データの処理中にエラーが発生した場合に SetLastError を呼び出すには、コールバック関数 (または呼び出す API の 1 つ) が必要です。

次の表に、 GetLastError 関数によって最も一般的に返されるエラー コードを示します。

リターン コード 説明
CRYPT_E_INVALID_MSG_TYPE
メッセージ型が無効です。
CRYPT_E_MSG_ERROR
暗号化操作の実行中にエラーが発生しました。
CRYPT_E_OID_FORMAT
オブジェクト識別子の形式が正しくありません。
CRYPT_E_UNEXPECTED_ENCODING
メッセージは期待どおりにエンコードされません。
CRYPT_E_UNKNOWN_ALGO
暗号化アルゴリズムは不明です。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
メモリが不足しました。
 

伝達されたエラーは、次のいずれかの関数から発生する可能性があります。

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

要件

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

こちらもご覧ください

CryptMsgGetParam

CryptMsgOpenToDecode

CryptMsgOpenToEncode

低レベルのメッセージ関数

簡略化されたメッセージ関数