CryptMsgUpdate 函式 (wincrypt.h)

CryptMsgUpdate 函式會將內容新增至密碼編譯訊息。 使用此函式可讓訊息透過重複的 CryptMsgUpdate 呼叫,逐一建構訊息。 新增的訊息內容會根據訊息是否以 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 設定為在開啟訊息的函式中,將 dwFlags 設定為CMSG_DETACHED_FLAG,來表示訊息中已中斷鏈接的數據。

如果未設定CMSG_DETACHED_FLAG,而且訊息是使用 CryptMsgOpenToDecodeCryptMsgOpenToEncode 開啟, fFinal 會設定為 TRUE,而 CryptMsgUpdate 只會呼叫一次。

如果已設定CMSG_DETACHED_FLAG旗標,並使用 CryptMsgOpenToEncode 開啟訊息,則 fFinal 只會在最後一次呼叫 CryptMsgUpdate 時設定為 TRUE

如果已設定CMSG_DETACHED_FLAG旗標,並使用 CryptMsgOpenToDecode 開啟訊息,當標頭由單一呼叫 CryptMsgUpdate 處理時,fFinal 會設定為 TRUE。 在後續對 CryptMsgUpdate 的呼叫中,它會設定為 FALSE,直到處理最後一個中斷鏈接的數據區塊為止。 在最後一次呼叫 CryptMsgUpdate 時,它會設定為 TRUE

譯碼中斷鏈接的數據時,訊息的標頭和內容會包含在不同的 BLOB 中。 當對該 BLOB 進行函式的最後一次呼叫時,每個 BLOB 都需要 將 fFinal 設定為 TRUE

傳回值

如果函式成功,則傳回值為非零 (TRUE) 。

如果函式失敗,則傳回值為零, (FALSE) 。 如需擴充錯誤資訊,請呼叫 GetLastError

如果在使用串流時,在 CryptMsgOpenToDecodeCryptMsgOpenToEncode中指定的應用程式定義回呼函式中發生錯誤,可能會傳播至 CryptMsgUpdate。 如果發生這種情況,在回呼函式傳回之後,CryptMsgUpdate 不會呼叫 SetLastError,這會保留應用程式控制下發生的任何錯誤。 如果應用程式正在處理串流數據時發生錯誤,則回呼函式 (或其中一個 API 會呼叫) 呼叫 SetLastError

下表列出 GetLastError 函式最常傳回的錯誤碼。

傳回碼 Description
CRYPT_E_INVALID_MSG_TYPE
訊息類型無效。
CRYPT_E_MSG_ERROR
執行密碼編譯作業時發生錯誤。
CRYPT_E_OID_FORMAT
物件標識碼的格式不正確。
CRYPT_E_UNEXPECTED_ENCODING
訊息未如預期編碼。
CRYPT_E_UNKNOWN_ALGO
密碼編譯演算法未知。
E_INVALIDARG
一或多個自變數無效。
E_OUTOFMEMORY
記憶體不足。
 

可能會從下列任何函式遇到傳播錯誤:

如果函式失敗, GetLastError 可能會傳回 抽象語法表示法一 (ASN.1) 編碼/譯碼錯誤。 如需這些錯誤的相關信息,請參閱 ASN.1 編碼/譯碼傳回值

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CryptMsgGetParam

CryptMsgOpenToDecode

CryptMsgOpenToEncode

低階訊息函式

簡化的訊息函式