共用方式為


Schannel 傳回的額外緩衝區

在建立 安全性內容 時,必須在用戶端與伺服器之間傳送資訊,因為安全訊息是使用 Schannel 提供的加密和解密功能來交換。 下列函式可用來完成這些工作:

通道具有一組定義完善的行為,適用于這些函式的輸入緩衝區中包含的不完整或過多資訊。 用戶端與伺服器之間會以下列方式交換資訊:

  1. 本機合作物件會藉由呼叫 SSPI 函式並傳入資訊來與 Schannel 互動。 一般而言,從遠端合作物件收到資訊。
  2. 函式會傳回包含資訊的狀態碼和輸出緩衝區。
  3. 視狀態碼而定,輸出緩衝區會透過某些通訊機制傳送至遠端合作物件。
  4. 遠端合作物件會讀取本機合作物件所傳送的資訊。
  5. 迴圈會重複,並交換本機和遠端合作物件。 (遠端合作物件會呼叫 SSPI 函式,並傳入上一個步驟中讀取的資訊。)

當 SSPI 函式的輸入緩衝區包含所需的資訊時,一切都如預期般運作。 不過,由於某些通訊協定的資料流程導向本質,因此可能不是這種情況;從遠端合作物件接收的資訊區塊可能包含比必要資料少,或單一函式呼叫中 Schannel 可以處理的更多資料。

如果輸入緩衝區包含的資訊太少,函式會傳回SEC_E_INCOMPLETE_MESSAGE。 呼叫端必須從遠端合作物件取得其他資料,然後再次呼叫 函式。

當輸入緩衝區包含太多資訊時,Schannel 不會將此視為錯誤。 函式會處理盡可能多的輸入,並傳回該處理活動的狀態碼。 此外,Schannel 會傳回類型為 SECBUFFER_EXTRA 的輸出緩衝區,指出輸入緩衝區中是否有未處理的資訊。 測試此類型緩衝區的輸出緩衝區是偵測這種情況的唯一方式。 額外緩衝區結構的 cbBuffer 欄位表示未處理多少個輸入位元組。

注意

額外緩衝區的 pvBuffer 欄位不包含過多資料的複本。

 

如果您從 SSPI 函式收到額外的緩衝區,您必須從輸入緩衝區移除已經處理過的資訊,然後再次呼叫函式。 通道通常只能傳回額外的緩衝區,而且輸出緩衝區中不會傳回其他任何緩衝區。