使用 SecBufferDesc 和 SecBuffer
通訊通常牽涉到可能大量的資料或長度未知的資料。 在這兩種情況下,傳送和接收資料的方式類似或相同。 為了處理未知的長度和可能大量資料,SSPI 通訊是使用兩個結構 ,SecBufferDesc 和 SecBuffer來完成。
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 範例程式碼。