Win32 API 日本語リファレンス
ホーム › Security.Authentication.Identity › SpInitLsaModeContextFn

SpInitLsaModeContextFn

コールバック

シグネチャ

NTSTATUS SpInitLsaModeContextFn(
    UINT_PTR CredentialHandle,
    UINT_PTR ContextHandle,
    LSA_UNICODE_STRING* TargetName,
    DWORD ContextRequirements,
    DWORD TargetDataRep,
    SecBufferDesc* InputBuffers,
    UINT_PTR* NewContextHandle,
    SecBufferDesc* OutputBuffers,
    DWORD* ContextAttributes,
    LONGLONG* ExpirationTime,
    BOOLEAN* MappedContext,
    SecBuffer* ContextData
);

パラメーター

フィールド型説明
CredentialHandleUINT_PTR省略可能。コンテキストに使用する 資格情報 へのハンドルです。ContextHandle パラメーターが NULL でない場合、CredentialHandle は NULL にできます。
ContextHandleUINT_PTR省略可能。このコンテキストの基になるコンテキストへのハンドルです。CredentialHandle パラメーターが NULL でない場合、ContextHandle は NULL にできます。
TargetNameLSA_UNICODE_STRING*省略可能。コンテキストのターゲット名を格納した UNICODE_STRING へのポインターです。TargetName の内容はパッケージ固有であり、LSA では解釈されません。
ContextRequirementsDWORD

クライアントが必要とするコンテキスト属性を示すフラグです。実際のコンテキスト属性は ContextAttributes パラメーターで返されます。

次の表に、有効な値を示します。

値 意味
ISC_REQ_DELEGATE
サーバーがクライアントを偽装することを許可します。
ISC_REQ_MUTUAL_AUTH
クライアントとサーバーの両方が、自身の身元を証明する必要があります。
ISC_REQ_REPLAY_DETECT
セキュリティコンテキスト が、リプレイされたパケットの検出をサポートします。
ISC_REQ_SEQUENCE_DETECT
セキュリティコンテキストが、順序が入れ替わったメッセージの検出をサポートします。
ISC_REQ_USE_SESSION_KEY
新しい セッションキー をネゴシエートする必要があります。
ISC_REQ_PROMPT_FOR_CREDS
クライアントが対話的なユーザーである場合、パッケージは可能であれば適切な資格情報の入力をユーザーに求める必要があります。
ISC_REQ_USE_SUPPLIED_CREDS
入力バッファーには、接続の認証に使用するパッケージ固有の資格情報が格納されています。
ISC_REQ_ALLOCATE_MEMORY
パッケージがメモリを割り当てる必要があります。呼び出し元は、パッケージが割り当てたメモリを解放するために、最終的に FreeContextBuffer 関数を呼び出す必要があります。
ISC_REQ_USE_DCE_STYLE
呼び出し元は、3 レグの相互認証トランザクションを想定しています。
ISC_REQ_DATAGRAM
データグラム型の通信チャネルを使用します。詳細については、 Datagram Contexts を参照してください。
ISC_REQ_CONNECTION
接続型の通信チャネルを使用します。詳細については、 Connection-Oriented Contexts を参照してください。
ISC_REQ_EXTENDED_ERROR
コンテキストの確立が失敗した場合に、クライアントに送り返すエラー応答メッセージを生成します。
ISC_REQ_STREAM
ストリーム型の通信チャネルを使用します。詳細については、 Stream Contexts を参照してください。
ISC_REQ_INTEGRITY
バッファーの整合性は検証されますが、リプレイされたメッセージや順序が入れ替わったメッセージは検出されません。
TargetDataRepDWORDターゲットにおけるバイト順序などのデータ表現を示すフラグです。SECURITY_NATIVE_DREP または SECURITY_NETWORK_DREP を格納します。
InputBuffersSecBufferDesc*サーバーからの直前の応答メッセージを格納した SecBufferDesc 構造体へのポインターです。この関数が最初に呼び出されるときは、InputBuffers パラメーターは NULL です。
NewContextHandleUINT_PTR*新しい セキュリティコンテキスト へのハンドルを受け取るポインターです。セキュリティコンテキストの使用が終わったら、SpDeleteContext 関数を呼び出してハンドルを解放してください。
OutputBuffersSecBufferDesc*サーバーに返すセキュリティトークンを格納した SecBufferDesc 構造体へのポインターです。
ContextAttributesDWORD*新しいコンテキストの属性を示すフラグへのポインターです。クライアントは ContextRequirements パラメーターで属性のセットを要求します。ContextRequirements のフラグが ContextAttributes のフラグと一致しない場合、クライアントは処理を続行するか終了するかを判断する必要があります。有効なフラグの完全な一覧については、 Context Requirements を参照してください。
ExpirationTimeLONGLONG*新しいコンテキストの有効期限を受け取る TimeStamp へのポインターです。
MappedContextBOOLEAN*ブール値へのポインターです。セキュリティパッケージ がユーザーモードの SSP/AP 関数を実装している場合は、MappedContext に TRUE を設定します。
ContextDataSecBuffer*ユーザーモードのセキュリティコンテキストを作成する際にコピーするデータを受け取る SecBuffer 構造体へのポインターです。ContextData のメモリは AllocateLsaHeap 関数を使用して割り当ててください。メモリは LSA によって解放されます。

公式ドキュメント

SpInitLsaModeContext 関数は、サーバーとクライアントの間に セキュリティコンテキスト を確立するために使用される、クライアント側のディスパッチ関数です。

SpInitLsaModeContext 関数は、クライアントが Security Support Provider Interface の InitializeSecurityContext (General) 関数を呼び出したときに呼び出されます。

戻り値

関数が成功し、それ以上の処理が不要な場合は STATUS_SUCCESS を返します。処理が完了していない場合は、SEC_I_CONTINUE_NEEDED を返す必要があります。この値が返された場合、呼び出し元は InitializeSecurityContext (General) 関数を再度呼び出す必要があります。

それ以外の理由で セキュリティコンテキスト の作成に失敗した場合は、失敗した理由を示す NTSTATUS コードを返す必要があります。

解説(Remarks)

SpAcceptLsaModeContext 関数は、コンテキストを作成するサーバー側の関数です。

SSP/AP は SpInitLsaModeContext 関数を実装する必要がありますが、実装に付ける実際の名前は開発者が自由に決められます。

SpInitLsaModeContext 関数へのポインターは、 SpLsaModeInitialize 関数から受け取る SECPKG_FUNCTION_TABLE 構造体に格納されています。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)