次の方法で共有


SecBufferDesc と SecBuffer の使用

通信には、多くの場合、大量のデータや長さが不明なデータが含まれます。 データの送受信は、どちらの場合も同様または同じ方法で行われます。 不明な長さと大量のデータに対処するために、 SSPI 通信は、SecBufferDescSecBuffer の 2 つの構造体を使用して行われます。

SecBufferDesc 構造体は、SecBuffer 構造体の配列のコンテナーです。 SecBufferDesc 構造体には、次のメンバーがあります。

SecBuffer 構造体には、次の 3 つのメンバーが含まれています。

  • バッファー内のバイト数
  • データ項目に含まれる情報の種類
  • バイト自体

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 の各呼び出しの前に、1 つ以上の SecBuffer 配列要素が宣言および初期化されます。 たとえば、2 つのセキュリティ バッファーがあります。1 つは入力メッセージ データを含み、もう 1 つはセキュリティ パッケージによって返される出力不透明なセキュリティ トークン用です。 セキュリティ バッファー記述子内のセキュリティ バッファーの順序は重要ではありませんが、各バッファーには適切な型でタグを付ける必要があります。 読み取り専用タグは、 セキュリティ パッケージで変更してはならない入力バッファーと共に使用できます。

セキュリティ トークンを含む出力バッファーのサイズが重要です。 アプリケーションは、初期セットアップ中にセキュリティ パッケージの最大トークン サイズを見つけることができます。 EnumerateSecurityPackages の呼び出しは、セキュリティ パッケージ情報へのポインターの配列を返します。 セキュリティ パッケージ情報構造体には、各パッケージの最大トークン サイズが含まれています。 この例では、情報は SecPkgInfo 構造体の cbMaxToken メンバーにあります。 同じ情報は、 後で QuerySecurityPackageInfo を使用して取得できます。

アプリケーションは、バッファー記述内のバッファー ポインターとサイズを初期化して、メッセージ データやその他の情報が見つかる場所を示します。

詳細については、「 SecBuffer と SecBufferDesc サンプル コード」を参照してください。