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,而且訊息是使用 CryptMsgOpenToDecode 或 CryptMsgOpenToEncode 開啟, 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。
如果在使用串流時,在 CryptMsgOpenToDecode 和 CryptMsgOpenToEncode中指定的應用程式定義回呼函式中發生錯誤,可能會傳播至 CryptMsgUpdate。 如果發生這種情況,在回呼函式傳回之後,CryptMsgUpdate 不會呼叫 SetLastError,這會保留應用程式控制下發生的任何錯誤。 如果應用程式正在處理串流數據時發生錯誤,則回呼函式 (或其中一個 API 會呼叫) 呼叫 SetLastError 。
下表列出 GetLastError 函式最常傳回的錯誤碼。
傳回碼 | Description |
---|---|
|
訊息類型無效。 |
|
執行密碼編譯作業時發生錯誤。 |
|
物件標識碼的格式不正確。 |
|
訊息未如預期編碼。 |
|
密碼編譯演算法未知。 |
|
一或多個自變數無效。 |
|
記憶體不足。 |
可能會從下列任何函式遇到傳播錯誤:
如果函式失敗, GetLastError 可能會傳回 抽象語法表示法一 (ASN.1) 編碼/譯碼錯誤。 如需這些錯誤的相關信息,請參閱 ASN.1 編碼/譯碼傳回值。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Crypt32.lib |
Dll | Crypt32.dll |