共用方式為


使用 SecBufferDesc 和 SecBuffer

通訊通常牽涉到可能大量的資料或長度未知的資料。 在這兩種情況下,傳送和接收資料的方式類似或相同。 為了處理未知的長度和可能大量資料,SSPI 通訊是使用兩個結構 ,SecBufferDescSecBuffer來完成。

SecBufferDesc結構是SecBuffer結構陣列的容器。 SecBufferDesc結構具有下列成員:

SecBuffer結構包含下列三個成員:

  • 緩衝區中的位元組數目
  • 資料項目中包含的資訊類型
  • 位元組本身

整個 SSPI 訊息通常包含 SecBuffer 結構的陣列。

下列緩衝區資料類型的定義如下。

緩衝區類型 意義
SECBUFFER_EMPTY 未定義,由 安全性套件 函式取代
SECBUFFER_DATA 封包資料
SECBUFFER_TOKEN 安全性權杖
SECBUFFER_PKG_PARAMS 套件特定參數
SECBUFFER_MISSING 遺漏資料指標
SECBUFFER_EXTRA 額外的資料
SECBUFFER_STREAM 安全性資料流程資料
SECBUFFER_STREAM_TRAILER 安全性資料流程預告片
SECBUFFER_STREAM_HEADER 安全性資料流程標頭

 

上述緩衝區類型可以使用位OR 運算與下列任一個緩衝區類型結合。

緩衝區類型 意義
SECBUFFER_ATTRMASK 藉由分隔屬性旗標與緩衝區類型來遮罩安全性屬性。
SECBUFFER_READONLY 緩衝區是唯讀的

 

每次呼叫需要 SecBufferDesc 參數的 SSPI API 之前,都會宣告並初始化一或多個 SecBuffer 陣列元素。 例如,可能有兩個安全性緩衝區:一個包含輸入訊息資料,另一個用於安全性套件所傳回的輸出不透明安全性權杖。 安全性緩衝區描述項中的安全性緩衝區順序並不重要,但每個緩衝區都必須以適當的類型標記。 唯讀標記可以與安全性 套件不可修改的任何輸入緩衝區搭配使用。

預期包含安全性權杖的輸出緩衝區大小很重要。 應用程式可以在初始設定期間找到安全性套件的權杖大小上限。 對 EnumerateSecurityPackages的呼叫會傳回安全性套件資訊的指標陣列。 安全性套件資訊結構包含每個封裝的權杖大小上限。 在此範例中,資訊位於SecPkgInfo結構的cbMaxToken成員中。 稍後可以使用 QuerySecurityPackageInfo取得相同的資訊。

應用程式會初始化緩衝區描述中的緩衝區指標和大小,以指出可以在哪裡找到訊息資料和其他資訊。

如需詳細資訊,請參閱 SecBuffer 和 SecBufferDesc 範例程式碼